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

发布于 2022-08-31 20:56:11 字数 1495 浏览 14 评论 0

需要的功能

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

图片描述

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

悲歌长辞 2022-09-07 20:56:11

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

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文