Php Yii2控制台:未找到app\models类,但找到了common\models

Php Yii2控制台:未找到app\models类,但找到了common\models,php,yii2,Php,Yii2,我有一个Yi2 web应用程序,其中包含50多个模型类文件,这些文件位于/models目录中 现在我想使用这些模型从/console/controllers/MyController.php运行一些控制台脚本,但是没有找到类app\models\ModelName错误,尽管顶部有使用app\models\ModelName 如果我将一个模型文件复制到/console/models/ModelName.php或/common/models/ModelName.php(并在使用中进行更改),它可以正

我有一个Yi2 web应用程序,其中包含50多个模型类文件,这些文件位于
/models
目录中

现在我想使用这些模型从
/console/controllers/MyController.php
运行一些控制台脚本,但是没有找到
类app\models\ModelName
错误,尽管顶部有
使用app\models\ModelName


如果我将一个模型文件复制到
/console/models/ModelName.php
/common/models/ModelName.php
(并在使用中进行更改),它可以正常工作。是否有任何选项可以使用/model中的模型,或者我是否应该重构应用程序,以便web和控制台都使用
/common/models

中的模型文件如果您使用的是Yi2 advanced build,请记住,
@app
别名每次都会根据您使用的应用程序的哪个部分设置

如果您是从
frontend
拨打电话,
@app
将等于/path/to/project root/frontend

如果从
后端
-/path/to/project root/backend

控制台
-/path/to/project root/console

您可以在
/common/config/bootstrap.php
中添加自定义别名,以使您的类从根目录可用

例如,尝试添加
Yii::setAlias('@root',dirname(dirname(_DIR__))
/common/config/bootstrap.php
并将名称空间设置为
根/模型

注意:如果尝试将
@app
添加到
bootstrap.php
,框架将自动重新分配它


注意2:如果您使用的是yii2高级版本,您可以检查yii2 autoloader在中的工作方式。请记住,
@app
别名每次都会根据您使用的应用程序的哪个部分设置

如果您是从
frontend
拨打电话,
@app
将等于/path/to/project root/frontend

如果从
后端
-/path/to/project root/backend

控制台
-/path/to/project root/console

您可以在
/common/config/bootstrap.php
中添加自定义别名,以使您的类从根目录可用

例如,尝试添加
Yii::setAlias('@root',dirname(dirname(_DIR__))
/common/config/bootstrap.php
并将名称空间设置为
根/模型

注意:如果尝试将
@app
添加到
bootstrap.php
,框架将自动重新分配它


注意2:您可以在中检查yii2 autoloader的工作方式

您可以从显示代码的相关部分开始-您如何准确运行这些脚本?也许你忘了添加自动加载器?你需要显示代码,当内联使用名称空间时,你需要在start中使用斜杠,如
\app\models\ModelName
对不起,这是一个大系统,很难删除代码的重要部分。我已经尝试过\app\models(正如我的IDE所建议的那样),但问题似乎是\app根据上下文指向不同的位置(正如Andry在回答中所说的),您可以从显示代码的相关部分开始—您到底如何运行这些脚本?也许你忘了添加自动加载器?你需要显示代码,当内联使用名称空间时,你需要在start中使用斜杠,如
\app\models\ModelName
对不起,这是一个大系统,很难删除代码的重要部分。我已经尝试了\app\models(正如我的IDE所建议的那样),但问题似乎是\app根据上下文指向不同的位置(正如Andry在回答中所说的),谢谢您的解释。alias做得更好(仍然不完美),但因为这意味着还要重写很多文件,我想我会将模型文件移到现有的/common/目录中-希望现在能解决这个问题。@zuups您可以在其他地方重新分配
@app
。类似于某些模型或组件的引导。虽然如果YISOFT使用此别名可能会导致意外结果,谢谢您的解释。alias做得更好(仍然不完美),但因为这意味着还要重写很多文件,我想我会将模型文件移到现有的/common/目录中-希望现在能解决这个问题。@zuups您可以在其他地方重新分配
@app
。类似于某些模型或组件的引导。虽然如果yiisoft使用此别名可能会导致意外结果