Yii2将函数应用于所有请求

时间:2016-02-18 22:36:16

标签: yii2 yii2-advanced-app

有没有办法将函数应用于Yii2中的所有请求和查询?

我想替换所有这些字符的特定字符。

我正在使用Yii2高级应用

感谢。

这是配置文件:

$config = [
    'language' => 'en',
    'components' => [
        'request' => [
            'cookieValidationKey' => 'something',
        ],
        'authManager' => [
            'class' => 'yii\rbac\DbManager',
            'defaultRoles' => ['guest'],
        ],
        'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
        ],
    ],
];

return $config;

2 个答案:

答案 0 :(得分:5)

如果没有在每个请求上扩展自定义代码,可以像这样执行(将其添加到您的应用程序配置中):

return [        
    'on beforeRequest' => function () {
        if (!Yii::$app->get('user', false)) {
            return;
        }

        $user = User::getCurrent();
        if ($user) {
            Yii::$app->setTimeZone($user->time_zone);
        }
    },
    'on afterRequest' => function () {
        ...
    },
];

根据您需要执行代码的时间(请求之前或之后),相应地使用'on beforeRequest''on afterRequest'

答案 1 :(得分:2)

yii2有一个request component。您可以扩展yii\web\request并定义自定义实现。

[
    ...
    'components' =>
        'request' => [
            'class' => '\common\MyRequest',
            'addGeoLocationForExample' => true,
        ]
        ...