php - Yii2:从供应商目录中的 Controller 运行控制台命令

标签 php yii yii2

我正在重构我们的大型工作应用程序。这涉及将我构建的一些工具(例如命令行的模式/种子迁移工具)分离到它们自己的存储库中,以供多个应用程序使用。

如果它在控制台/ 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/

相关文章:

javascript - 当管理员用户的帐户超时时,如何提醒他们

yii2 - 无法使用 Swiftmailer 和 Yii2 嵌入图像

php - yii 关系复杂事件记录任务

mysql - Yii2如何将where子句中的级联选择转换为activequery?

Yii2-具有ActiveRecord的表别名

php - 我将如何组织数据以向用户发送许多电子邮件?

php - 显示来自 mySQL 数据库的结果...如何在 X 个结果后添加表?

javascript - AngularJS与MySQL实时通信

php - 社交网站的 Zend、Yii 和 CI

ajax - 来自 Yii CListView 的 "Post"参数