Yii2 runAction 方法用于调取本控制器或者其他控制器的方法并执行。今天在更新纯静态页的时候用到了它,就整理了一下使用方法及参数。
runAction 调用方法
在同一模块、同一控制器里
public function actionIndex()
{
$this->runAction('test');
}
public function actionTest()
{
var_dump(‘这是 site 控制器下的 test 方法’);
}
访问index方法的结果:string(39) “这是 site 控制器下的 test 方法”
在同一模块、不同控制器里
// IndexController.php
public function actionIndex()
{
Yii::$app->runAction('test/index');
}
// TestController.php
function actionIndex()
{
var_dump(‘这是 test 控制器下的 index 方法’);
}
调用 Index 控制器的 index 方法:string(41) “这是 test 控制器下的 index 方法”
在不同模块下
//frontend\controllers\IndexController.php
function actionIndex()
{
(new \backend\controllers\SiteController($this->id, $this->module))->runAction('index');
}
//backend\controllers\SiteController.php
function actionIndex()
{
var_dump(‘这里是 backend 模块下的 index 控制器 index 方法’);
}
调用 frontend 模块下的 index 方法:string(59) “这里是 backend 模块下的 index 控制器 index 方法”
。
runAction 传递参数
参数使用 runAction 方法的第二个参数进行传递。
public function actionIndex()
{
$this->runAction('test', ['params1'=>'1','params2'=>'2']);
}
public function actionTest($params1, KaTeX parse error: Expected '}', got 'EOF' at end of input: … 控制器下的 test 方法,params1的参数是:’. p a r a m s 1. < s p a n c l a s s = " h l j s − s t r i n g " > ′ , params1.<span class="hljs-string">', params1.<spanclass="hljs−string">′,params2的参数是 '.KaTeX parse error: Expected 'EOF', got '}' at position 11: params1); }̲</code></pre><p…params1的参数是:1,$params2的参数是 1"
另外需要注意的两点:
- 参数值不能为数组,只能是字符串。
- 参数如果不传递,被调用方法必须有默认值。