我在Yii2应用程序中有api模块。在提出任何要求之前,我需要检查用户是否在帖子中发送语言或获取请求。如果用户未发送语言,则抛出422代码异常。
我有模块Api.php。我应该只为此模块配置。
答案 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