素材牛VIP会员
yii2 如何实现所有action之前执行一段代码?
 谁***的  分类:ThinkPHP  人气:1294  回帖:1  发布于6年前 收藏

需要的功能

程序初始化之后,在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

 标签:eventthinkphpyii2

讨论这个帖子(1)垃圾回帖将一律封号处理……

Lv5 码农
雨***啊 产品经理 6年前#1

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

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

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

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取