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

时间:2018-10-20 10:52:08

标签: yii2 yii-rest

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

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

1 个答案:

答案 0 :(得分:0)

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

if (preg_match('/^[a-z0-9]+$/', $username) {
  echo "Looks good\n";
} else {
echo "Invalid character\n";
}

if (preg_match('/^\p{Xan}+$/', $username) {
echo "Looks good\n";
 } else {
echo "Invalid character\n";
}

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

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");
        }
    }
}

如果需要,可以添加其他事件。就像AFTER_REQUEST