我正在创建一个具有控制台控制器的插件。
这是插件布局
plugin/
controller/
MyController
控制器本身的内容如下所示
namespace plugin\controller;
class MyController extends \yii\console\Controller {
public function actionFoo(){
}
public function actionBar(){
}
}
使用该控制器的应用程序的配置将如下所示
'controllerMap' => [
'my' => [
'class' => 'plugin\controller\MyController'
]
]
这样app可以使用类似的东西来执行控制器
yii my/foo
问题是,actionFoo
我要执行actionBar
到exec()
。
这是我可以去的地方,
由于我可以使用控制器映射为控制器设置控制台命令的名称,因此我也可以将名称作为控制器的属性传递。
'controllerMap' => [
'my' => [
'class' => 'plugin\controller\MyController',
'name' => 'my',
]
]
控制器将是这样的
namespace plugin\controller;
class MyController extends \yii\console\Controller {
public $name = 'my';
public function actionFoo() {
$yiipath = 'yii';
$command = PHP_BINARY . " {$yiipath} {$this->my}/bar";
exec($command);
}
public function actionBar() {
}
}
问题是,如何确定上面yii
变量的$yiipath
脚本(即Yii控制台引导程序文件)的路径?
更新
我能想到的唯一方法是
$yiipath = getcwd()) . DIRECTORY_SEPARATOR . $_SERVER['argv'][0];
但它有点脏。我想知道是否有清洁工或者是" Yii2"方式是什么?
答案 0 :(得分:1)
你可以添加到yii.php
文件中:
define('YII_EXEC', pathinfo(__FILE__, PATHINFO_EXTENSION));
并在您的控制器中使用
$command = "PHP_BINARY YII_EXEC {$this->my}/bar";