如何在运行时确定Yii2控制台引导程序文件的位置?

时间:2015-02-24 04:09:04

标签: yii2

我正在创建一个具有控制台控制器的插件。

这是插件布局

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我要执行actionBarexec()

这是我可以去的地方,

由于我可以使用控制器映射为控制器设置控制台命令的名称,因此我也可以将名称作为控制器的属性传递。

'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"方式是什么?

1 个答案:

答案 0 :(得分:1)

你可以添加到yii.php文件中:

define('YII_EXEC', pathinfo(__FILE__, PATHINFO_EXTENSION));

并在您的控制器中使用

$command = "PHP_BINARY YII_EXEC {$this->my}/bar";