我正在重构我们的大型工作应用程序。这涉及将我构建的一些工具(例如命令行的模式/种子迁移工具)分离到它们自己的存储库中,以供多个应用程序使用。
如果它在控制台/ Controller 中,它会被拾取。如果我将它们移动到他们自己的存储库并通过 Composer 需要它,当我说 php yii db/up
时,我如何让 Yii 知道,我的意思是转到 new\vendor\namespace\DbController@actionup
?
最佳答案
如果您创建一个扩展(当然是通过 composer 加载它),您可以在里面找到 Module.php
,它将保存到控制台 Controller 的路径(您可以用您的终端调用)。
我将为 common\modules\commander
命名空间编写我的示例,对于供应商扩展,您的命名空间将有所不同,但它以相同的方式适用于所有这些命名空间。
所以我的扩展名有以下文件结构
<app>
common
modules
commander
controllers
• TestController.php
• Module.php
我的模块类如下所示:
namespace common\modules\commander;
use yii\base\Module as BaseModule;
class Module extends BaseModule
{
public $controllerNamespace = 'common\modules\commander\controllers';
public function init()
{
parent::init();
}
}
而TestController.php
是继承自yii\console\Controller
:
namespace common\modules\commander\controllers;
use yii\console\Controller;
class TestController extends Controller
{
public function actionIndex()
{
echo 123;
}
}
让一切正常运行的主要部分是在 console/config/main.php
设置中注册 Module.php
'modules' => [
'commander' => [
'class' => \common\modules\commander\Module::className(),
],
...
],
就是这样,现在你可以像这样使用你的命令了:
yii commander/test/index
它会打印出 123
,表明一切正常并且控制台 Controller 位于不同的文件夹中!
关于php - Yii2:从供应商目录中的 Controller 运行控制台命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44706899/