Yii2呼叫控制台控制器/后端控制器中的操作

时间:2018-10-25 07:20:12

标签: php command-line yii2 console sitemap

我叫控制员

  

SiteMapController.php

采取行动

  

索引

在Yii2的控制台文件夹中
 enter image description here
我可以从命令行运行它。
enter image description here
但是我需要从后端/ controllers文件夹的控制器中运行它。这意味着我应该从Yii2后端控制器操作中运行控制器SiteMapController.php的索引操作。这是我的测试代码,但不起作用。 后端/控制器/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"

但是运行索引没有帮助

我没有其他选择。

2 个答案:

答案 0 :(得分:1)

使用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)

答案 1 :(得分:0)

如果您使用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(如果init脚本是在安装程序上执行的)和yii2-app-basic项目模板的一部分。