Yii2 runAction 调用其他控制器方法及传递参数

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.', params1.<spanclass="hljsstring">params2的参数是 '.KaTeX parse error: Expected 'EOF', got '}' at position 11: params1); }̲params1的参数是:1,$params2的参数是 1"

另外需要注意的两点:

  1. 参数值不能为数组,只能是字符串。
  2. 参数如果不传递,被调用方法必须有默认值。

你可能感兴趣的:(yii)