举杯邀月

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

摘要:Yii2 runAction 方法用于调取本控制器或者其他控制器的方法并执行。今天在更新纯静态页的时候用到了它,就整理了一下使用方法及参数。

Yii2 runAction 方法用于调取本控制器或者其他控制器的方法并执行。今天在更新纯静态页的时候用到了它,就整理了一下使用方法及参数。

在同一模块、同一控制器里

public function actionIndex()
{
    $this->runAction('test');
}

public function actionTest()
{
    var_dump('这是 site 控制器下的 test 方法');
}
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9

访问index方法的结果:string(39) "这是 site 控制器下的 test 方法"

在同一模块、不同控制器里

// IndexController.php
public function actionIndex()
{
    Yii::$app->runAction('test/index');
}


// TestController.php
function actionIndex()
{
     var_dump('这是 test 控制器下的 index  方法');
}

1
2
3
4
5
6
7
8
9
10
11
12
13
1
2
3
4
5
6
7
8
9
10
11
12
13
1
2
3
4
5
6
7
8
9
10
11
12
13

调用 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 方法');
}
1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11

调用 frontend 模块下的 index 方法:string(59) "这里是 backend 模块下的 index 控制器 index 方法"

runAction 传递参数

参数使用 runAction 方法的第二个参数进行传递。

public function actionIndex()
{
    $this->runAction('test', ['params1'=>'1','params2'=>'2']);
}

public function actionTest($params1, $params2)
{
    var_dump('这是 site 控制器下的 test 方法,$params1的参数是:'.$params1.',$params2的参数是 '.$params1);
}
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9

执行结果:string(91) "这是 site 控制器下的 test 方法,$params1的参数是:1,$params2的参数是 1"

另外需要注意的两点:

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

作者:举杯邀月

出处: http://www.hug-code.cn/archives/5fc70b5cc5199.html

2020-07-31 标签: yii2