2017-06-22 2 views
3

私たちの大規模な仕事用アプリケーションのリファクタリングを行っています。これは、コマンドライン用のスキーマ/シード移行ツールのように、複数のアプリケーションで使用される独自のリポジトリに構築したツールを分離することです。Yii2:ベンダーのディレクトリにあるコントローラーからコンソールコマンドを実行

コンソール/コントローラに搭載されている場合は、選択されます。私が自分のリポジトリに移動してComposer経由で要求した場合、php yii db/upと言うときにYiiに知らせるにはどうすればnew\vendor\namespace\[email protected]に行くのですか?

答えて

2

エクステンションを作成して(もちろんコンポーザーを通してロードする)、Module.phpが内部にあり、コンソールコントローラ(端末で呼び出すことができる)へのパスが保持されます。

common\modules\commander namespaceのサンプルを作成します。ベンダー拡張の名前空間は異なりますが、すべて同じ方法で動作します。

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; 
    } 
} 

を、メイン部分 は、だから私は

<app> 
    common 
    modules 
     commander 
     controllers 
      • TestController.php 
     • Module.php 

マイModuleクラスは以下のように見える私の拡張のために、以下のファイル構造を持っていますすべて動作させるには、Module.phpをconsole/config/main.phpの設定で登録することです。

ここ
'modules' => [ 
    'commander' => [ 
     'class' => \common\modules\commander\Module::className(), 
    ], 
    ... 
], 

それは今あなたのようなあなたのコマンドを使用することができ、次のとおりです。

yii commander/test/index 

そして、それはすべての作品やコンソールコントローラを別のフォルダに配置されていることを示し、あなたに123を印刷しますよ!

+1

誰もが与えることができるように、それはまあまあ良い説明でした。釘付け、すぐに働く。ありがとうございました! – diabetesjones

+0

あなたはようこそ、糖尿病=) – Yerke

関連する問題