yii2 在控制器中验证请求参数的使用方法
写api接口时一般会在控制器中简单验证参数的正确性。
使用yii只带验证器(因为比较熟悉)实现有两种方式(效果都不佳)。
针对每个请求单独写个 Model,定义验证规则并进行验证。缺点:写好多参数验证的 Model类。
使用 独立验证器中提到的 $validator->validateValue()方法直接验证变量值。缺点:写实例化很多验证器对象。
有么有“一劳永逸”的做法,像在 Model中通过 rules方法定义验证规则并实现快速验证的呢?有!
使用方法(实现效果)
namespacefrontend\controllers\api; useyii\web\Controller; usecommon\services\app\ParamsValidateService; classArticleControllerextendsController { //文章列表 publicfunctionactionList() { $PVS=newParamsValidateService(); $valid=$PVS->validate(\Yii::$app->request->get(),[ ['category_id','required'], ['category_id','integer'], ['keyword','string'], ]); if(!$valid){ $this->apiError(1001,$PVS->getErrorSummary(true)); } //... } //新增文章 publicfunctionactionPost() { $PVS=newParamsValidateService(); $valid=$PVS->validate(\Yii::$app->request->get(),[ [['category_id','title','content'],'required'], ['category_id','integer'], [['title'],'string','max'=>64], [['content'],'string'], ]); if(!$valid){ $this->apiError(1001,$PVS->getErrorSummary(true)); } //... } //文章删除 publicfunctionactionDelete() { $PVS=newParamsValidateService(); $valid=$PVS->validate(\Yii::$app->request->get(),[ ['article_id','required'], ['article_id','integer'], ]); if(!$valid){ $this->apiError(1001,$PVS->getErrorSummary(true)); } //... } }
实现方法
定义参数验证模型
定义参数验证模型 ParamsValidateModel,继承 yii\db\ActiveRecord,重写 attributes()方法,主要功能:
- 验证规则可从对象外部进行设置。
- 从验证规则中获取可赋值的属性。
_rules=$rules; foreach($rulesas$item){ $this->_attributes=array_unique(array_merge($this->_attributes,(array)$item[0])); } } //重写获取验证规则 publicfunctionrules() { return$this->_rules; } //设置可用属性列表 publicfunctionattributes() { return$this->_attributes; } }
定义参数验证服务类
定义参数验证服务类,主要功能有:
- 设置参数列表和参数规则列表。
- 使用 参数验证模型进行验证和存储验证错误消息。
- 使用魔术方法获取 参数验证模型中的验证错误消息。
model=newParamsValidateModel(); } /** *@paramarray$data数据项 *@paramarray$rules验证规则 *@returnbool */ publicfunctionvalidate($data,$rules) { //添加验证规则 $this->model->setRules($rules); //设置参数 $this->model->load($data,''); //进行验证 return$this->model->validate(); } publicfunction__call($name,$params) { if($this->model->hasMethod($name)){ returncall_user_func_array([$this->model,$name],$params); }else{ returnparent::__call($name,$params); } } }
总结
以上所述是小编给大家介绍的yii2在控制器中验证请求参数的使用方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。