首页 > yii2 如何实现所有action之前执行一段代码?

yii2 如何实现所有action之前执行一段代码?

需要的功能

程序初始化之后,在action*执行之前,执行一段代码:查询一个数据表 {{%config}},字段varname ,value,用于控制器中当做全局变量来使用,如何实现这样的绑定?
thinkphp是很方便的进行,在tags.php 里面绑定 Behaviors,yii2是如何实现这样的功能,需要修改的是哪一个文件?

我自己写的

[
    'on beforeAction' => ['app\events\initSiteConfig','assign']
]
php#文件 app/events/initSiteConfig.php

namespace app\events;

use yii\base\Event;
use yii\db\Query;

class initSiteConfig extends Event
{

    public static function assign()
    {
        $rows = (new Query())
            ->select('*')
            ->from('{{%config}}')
            ->all();

        $arr = array();
        foreach ($rows as $row) {
            $arr[$row['varname']] = $row['value'];
        }

        \Yii::$app->params = array_merge(\Yii::$app->params, $arr);
    }
}



2015-5-24补充:
觉得有点迷糊了,如果在yii2中想在所有Action之前执行2个绑定

1)初始化站群配置 app\events\initSiteConfig init()
2)初始化会员日志,如何实现? app\events\initUser init()

我的实现:

#/config/web.php 中加入
'on beforeAction' => [ ['app\events\initSiteConfig','init'],['app\events\initUser','init']],

报错提示:

call_user_func() expects parameter 1 to be a valid callback, first array member is not a valid class name or object


在controller中写beforeaction函数,别忘了最后return true;

phppublic function beforeaction($action){
    //do something
    return true;
}

还有init(),会在controller实例化的时候执行

【热门文章】
【热门文章】