我有一个控制台命令来生成用户报告。我想从我的网络应用程序中调用相同的内容。我正在使用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,我会收到错误。有人可以指导我吗?
答案 0 :(得分:4)
答案 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)
试试这个:
它是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 );