2017-06-22 65 views
3

从控制器运行控制台命令我做了大的工作的应用程序的一些重构。这涉及到将我构建的一些工具(如命令行的模式/种子迁移工具)分离到其自己的存储库以供多个应用程序使用。Yii2:在供应商目录

如果是在控制台/控制器,它就会回升。如果我将它们移动到自己的资源库,并通过作曲家需要它,我怎么Yii的知道,当我说php yii db/up,我的意思是去到new\vendor\namespace\[email protected]

回答

2

如果您创建了一个扩展(当然通过作曲者加载它),您可以在里面找到Module.php,这将保存控制台控制器的路径(您可以通过终端调用)。

我会写我的例子为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.phpyii\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,表明一切正常和控制台控制器位于不同的文件夹!

+1

好yerke,这是一样好一个解释,任何人都可以给任何东西。钉住它,立即工作。谢谢! – diabetesjones

+0

欢迎你,diabetesjones =) – Yerke