Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Yii2 在Yii 2.0中,如何在web应用程序中调用控制台命令_Yii2 - Fatal编程技术网

Yii2 在Yii 2.0中,如何在web应用程序中调用控制台命令

Yii2 在Yii 2.0中,如何在web应用程序中调用控制台命令,yii2,Yii2,我有一个控制台命令来生成用户报告。我想从我的web应用程序中调用相同的函数。我正在使用Yii 2.0.0测试版。我试着按照这篇文章给出的答案来做 由于Yii 2.0结构与Yii 1.1非常不同,如果我尝试包含command/userReportController.php,就会出现错误。有人可以指导我吗?您应该使用类似的扩展 继续加载 试试这个: 是yii(没有ext,不是yii.bat) 确保已将php文件夹添加到路径变量(Windows) 输出: The following cache co

我有一个控制台命令来生成用户报告。我想从我的web应用程序中调用相同的函数。我正在使用Yii 2.0.0测试版。我试着按照这篇文章给出的答案来做


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

您应该使用类似的扩展

继续加载

试试这个:

是yii(没有ext,不是yii.bat)

确保已将php文件夹添加到路径变量(Windows)

输出:

The following cache components were processed:

* cache (yii\\caching\\FileCache)
使用此代码:

$application = new yii\console\Application($config);
$application->runAction('controller/action');
我使用这个方法而不是
yii
console命令,因为我在托管VPS上运行yii,在托管VPS上,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')
);

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

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

如果确实要通过Web controller运行Console controller,请执行以下操作:

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应用程序基本
模板,您可以更改
yii2应用程序高级
模板的路径。

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

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

谢谢,这确实很有帮助。您是如何设置console runner的?无论何时我从我的web应用程序调用它,它都会挂起,浏览器会一直加载页面。在重新启动apache之前,我无法打开任何其他页面。Console Runner使用PHP_BINDIR,它指向c:\PHP,但我使用WAMP,所以PHP bin dir在其他地方。我设法解决了这个问题,但console runner仍然无法工作。无论我试图运行一个有效的控制器操作,或者只是输入gibberish,它总是返回状态1:/Thank,但我已经阅读了文档并设置了控制台命令,我的问题是如何从web(前端)调用它。事实上,但是,如果不定义
yii\console\Application
:STDIN、STDOUT和STDERR中的标准常量,它可能无法工作。您可能需要定义它们。
$cmd = "cd /home/site.com/public_html/yii && nohup php yii file/convert >/dev/null &";
shell_exec( $cmd );