后端控制器中的 Yii2 Call Console controller/action

Yii2 Call Console controller/action in backend controller

我批​​评了控制器

SiteMapController.php

采取行动

index

在 Yii2 的控制台文件夹中

我可以从命令行 运行 它。

但是我需要 运行 它来自 backend/controllers 文件夹的控制器。这意味着我应该 运行 索引控制器的动作 SiteMapController.php 来自 Yii2 后端控制器动作。这是我的测试代码,但它不起作用。 Backend/controllers/BlogController.php

private function runSiteMapGenerate(){
    $cr = new ConsoleRunner(['file' => '@console']);
    $cr->run('site-map');
}

两个脚本我都试过了

"vova07/yii2-console-runner-extension": "*",
"tebazil/yii2-console-runner": "^0.0.0"

但是对运行索引没有帮助

我没有更多的选择。

使用 chdir 和 运行 找到 yii 目录下一个 shell_exec。使用它可以使它变得简单,无需安装任何扩展。

chdir('../yiifolder'); //folder that contains yii
$output = shell_exec('php yii migrate');
var_dump($output);

这是在我的服务器上测试的。

输出:

string 'Yii Migration Tool (based on Yii v2.0.6)

No new migration found. Your system is up-to-date.
' (length=93)

如果您使用 vova07/yii2-console-runner-extension,您需要将 file 设置为通常位于根文件夹中的 yii 脚本的路径 - 您不需要' 在这里指定控制台目录。所以很有可能你是这样创建对象的:

// assuming you have file 'yii' in the root directory:
$cr = new ConsoleRunner(['file' => '@app/yii']);

那么实际调用应该有效:

// assuming that 'index' is the default action
$cr->run('site-map');
// or
$cr->run('site-map/index');

信息:如果应该执行控制台命令,您实际上会使用命令的一些参数调用 yii。您不直接调用命令。 yii 启动控制台应用程序。看看这个文件。它是 yii2-app-advanced (present if the init script was executed on setup) and yii2-app-basic 项目模板的一部分。