如何在Yii 2.0中调用Web应用程序中的控制台命令

时间:2014-08-18 02:08:22

标签: yii2

我有一个控制台命令来生成用户报告。我想从我的网络应用程序中调用相同的内容。我正在使用Yii 2.0.0测试版。我试图按照这篇文章中给出的答案How to call a console command in web application action in Yii?

由于Yii 2.0结构与Yii 1.1非常不同,如果我尝试包含command / userReportController.php,我会收到错误。有人可以指导我吗?

6 个答案:

答案 0 :(得分:4)

您应该使用https://github.com/vova07/yii2-console-runner-extension

之类的扩展程序

答案 1 :(得分:4)

我认为这是最简单的解决方案:

$controller = new YourConsoleController(Yii::$app->controller->id, Yii::$app);
$controller->actionYourConsoleAction();

答案 2 :(得分:1)

使用此代码:

$application = new yii\console\Application($config);
$application->runAction('controller/action');

我使用此方法而不是yii控制台命令,因为我在托管VPS上运行Yii,其中cron不支持unix命令,只有php脚本。

要以这种方式而不是控制台运行,必须首先初始化yii配置:

defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');

require(__DIR__ . '/vendor/autoload.php');
require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php');
require(__DIR__ . '/common/config/bootstrap.php');
require(__DIR__ . '/console/config/bootstrap.php');

$config = yii\helpers\ArrayHelper::merge(
    require(__DIR__ . '/common/config/main.php'),
    require(__DIR__ . '/common/config/main-local.php'),
    require(__DIR__ . '/console/config/main.php'),
    require(__DIR__ . '/console/config/main-local.php')
);

答案 3 :(得分:0)

  

yii2-console-runner-extension继续加载。

试试这个:

  

它是yii(没有分机,不是yii.bat)

     

确保将php文件夹添加到PATH变量(Windows)

Invoice

输出:

$op = shell_exec ( 'absolute/path/to/yii ' . 'cache/flush-all' );
\yii\helpers\VarDumper::dump($op, 10, 1);

答案 4 :(得分:0)

如果您真的想通过Web控制器运行控制台控制器,请执行以下操作:

public function actionMigrate()
{
    // Keep current application
    $oldApp = \Yii::$app;
    // Load Console Application config
    $config = require \Yii::getAlias('@app'). '/config/console.php';
    new \yii\console\Application($config);
    $result = \Yii::$app->runAction('migrate', ['migrationPath' => '@app/migrations/', 'interactive' => false]);
    // Revert application
    \Yii::$app = $oldApp;
    return;
}

以上示例代码适用于yii2-app-basic模板,您可以更改yii2-app-advanced模板的路径。

答案 5 :(得分:0)

假设您的操作称为文件/转换,并且您想在后台运行它:

$cmd = "cd /home/site.com/public_html/yii && nohup php yii file/convert >/dev/null &";
shell_exec( $cmd );