yii2检查模块中语言的全局行为

yii2检查模块中语言的全局行为,yii2,yii-rest,Yii2,Yii Rest,我在Yii2应用程序中有api模块。在任何重新测试之前,我需要检查用户是否在post或get请求中发送了语言。若用户并没有发送语言,那个么抛出带有422代码的异常 我有模块Api.php。我应该只为此模块进行配置。创建BeforeActionValidator之前的行为,然后使用HttpException在创建验证规则中创建beforeAction之前的方法。下面是一个例子: class BeforeActionValidator extends Behavior { public $

我在Yii2应用程序中有api模块。在任何重新测试之前,我需要检查用户是否在post或get请求中发送了语言。若用户并没有发送语言,那个么抛出带有422代码的异常


我有模块Api.php。我应该只为此模块进行配置。

创建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,
                ]
            ]);
    }

如果需要,可以添加其他事件。比如请求后

您好,您能提供更多信息吗?我有api模块。在每个请求中,用户应在GET或POST请求中提供参数“lang”。如果没有,我应该抛出例外。你有什么样的控制器?REST还是WEB?您有REST控制器吗?在api模块中,我使用rest controllerInit()方法在模块中的何处