Yii2 控制台:app\models Class 未找到但 common\models 找到
Yii2 Console: app\models Class not found but common\models found
我有一个 Yii2 网络应用程序,其中包含 50 多个模型 class 文件,这些文件位于 /models
目录中。
现在我想 运行 来自 /console/controllers/MyController.php
的一些控制台脚本使用这些模型但是得到 class app\models\ModelName not found
错误,尽管顶部有 use app\models\ModelName
。
如果我将模型文件复制到 /console/models/ModelName.php
或 /common/models/ModelName.php
(并在使用中进行更改),它就可以正常工作。是否有任何选项可以使用 /model 中的模型,或者我应该重构应用程序以便 Web 和控制台都使用来自 /common/models
的模型文件
如果您使用的是 yii2-advanced 构建,请记住 @app
每次都会根据您使用的应用程序部分设置别名。
如果您从 frontend
拨打电话,@app
将等于 /path/to/project-root/frontend。
如果来自 backend
- /path/to/project-root/backend.
console
- /path/to/project-root/console
您可以在 /common/config/bootstrap.php
中添加自定义别名,使您的 类 可从 root 访问。
例如尝试将 Yii::setAlias('@root', dirname(dirname(__DIR__)));
添加到 /common/config/bootstrap.php
并将命名空间设置为 root/models
注意:如果您尝试将@app
添加到bootstrap.php
,它会被框架自动重新分配。
注 2: 你可以查看 yii2 autoloader 是如何工作的 BaseYii.php
我有一个 Yii2 网络应用程序,其中包含 50 多个模型 class 文件,这些文件位于 /models
目录中。
现在我想 运行 来自 /console/controllers/MyController.php
的一些控制台脚本使用这些模型但是得到 class app\models\ModelName not found
错误,尽管顶部有 use app\models\ModelName
。
如果我将模型文件复制到 /console/models/ModelName.php
或 /common/models/ModelName.php
(并在使用中进行更改),它就可以正常工作。是否有任何选项可以使用 /model 中的模型,或者我应该重构应用程序以便 Web 和控制台都使用来自 /common/models
如果您使用的是 yii2-advanced 构建,请记住 @app
每次都会根据您使用的应用程序部分设置别名。
如果您从 frontend
拨打电话,@app
将等于 /path/to/project-root/frontend。
如果来自 backend
- /path/to/project-root/backend.
console
- /path/to/project-root/console
您可以在 /common/config/bootstrap.php
中添加自定义别名,使您的 类 可从 root 访问。
例如尝试将 Yii::setAlias('@root', dirname(dirname(__DIR__)));
添加到 /common/config/bootstrap.php
并将命名空间设置为 root/models
注意:如果您尝试将@app
添加到bootstrap.php
,它会被框架自动重新分配。
注 2: 你可以查看 yii2 autoloader 是如何工作的 BaseYii.php