【问题标题】:Yii2, how to run a command from another command?Yii2,如何从另一个命令运行命令?
【发布时间】:2015-05-25 11:55:11
【问题描述】:

我想创建一个长命令的快捷方式。

我的命令是: ./yii gii/giiant-crud --modelClass="app\models\Job" --controllerClass="app\modules\admin\controllers\JobController" --searchModelClass="app\models\search\Job" --template="admin"

我想要的命令是: ./yii gii-q/crud job

我创建了一个命令控制器,但我不确定如何从这里运行另一个命令控制器:

<?php namespace app\commands;

use yii\console\Controller;
use yii\helpers\Inflector;

class GiiQController extends Controller
{
    public function actionCrud($table)
    {
        $model = Inflector::classify($table);
        $command = 'gii/giiant-crud --modelClass="app\\models\\' . $model . '" --controllerClass="app\\modules\\admin\\controllers\\' . $model . 'Controller" --searchModelClass="app\\models\\search\\' . $model . '" --template="admin"';
        // how to run command?
    }
}

我更愿意在同一个线程中运行 yiic-command(而不是通过调用 exec)。

【问题讨论】:

标签: yii2


【解决方案1】:

您可以使用\Yii::$app-&gt;runAction('controller/action', $params); 在应用内运行操作

不确定它是否记录在案,这是它的源代码https://github.com/yiisoft/yii2/blob/master/framework/base/Controller.php#L118 和讨论https://github.com/yiisoft/yii2/issues/1764

在你的情况下是:

<?php namespace app\commands;

use yii\console\Controller;
use yii\helpers\Inflector;

class GiiQController extends Controller
{
    public function actionCrud($table)
    {
        $model = Inflector::classify($table);
        \Yii::$app->runAction('gii/giiant-crud', [
            "modelClass" => $model,
            "controllerClass" => "app\\modules\\admin\\controllers\\" . $model . "Controller",
            "searchModelClass" => "app\\models\\search\\" . $model,
            "template" => "admin"
        ]);
    }
}

【讨论】:

    猜你喜欢
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-29
    • 1970-01-01
    相关资源
    最近更新 更多