首页 > 解决方案 > yii2 全局行为检查模块中的语言

问题描述

我在 Yii2 应用程序中有 api 模块。在任何请求之前,我需要检查用户是否在帖子中发送语言或获取请求。如果用户没有发送语言,则使用 422 代码抛出异常。

我有模块 Api.php。我应该只为这个模块配置。

标签: yii2yii-rest

解决方案


创建行为 BeforeActionValidator,然后在使用 HttpException 创建验证规则中创建方法 beforeAction。这是示例:

class BeforeActionValidator extends Behavior
{

    public $rules = [];

    public function events()
    {
        return [
            Controller::EVENT_BEFORE_ACTION => 'beforeAction'
        ];
    }


    public function beforeAction()
    {
        $lang = Yii::$app->request->get('lang', null)??Yii::$app->request->post('lang', null);
        if ($lang == null) {
            throw new HttpException(422,"lang is required");
        }
    }
}

然后将此行为附加到配置文件。在你的模块中。

public function init()
    {
        parent::init();

        \Yii::configure($this,
            [
                'as globalAccess' => [
                    'class' => BeforeActionValidator::class,
                ]
            ]);
    }

如果你愿意,你可以添加其他事件。喜欢 AFTER_REQUEST


推荐阅读