如何优雅的使用 laravel 的 validator验证方法
web开发过程中经常会需要进行参数验证,laravel中我们常用validator或者request这两种方法来进行验证,但是这两种验证都不是很方便进行自定义提示信息,自定义验证规则,所以下面来介绍一种很方便的用法:
新建抽象类
valuearray * *@vararray */ protected$data=array(); /** *Validationerrors * *@vararray */ protected$errors=array(); /** *Validationrules * *@vararray */ protected$rules=array(); /** *Validationmessages * *@vararray */ protected$messages=array(); /** *Validationcodes * *@vararray */ protected$codes=array(); publicfunction__construct(array$data) { $this->data=$data; $this->before(); $this->validator=Validator::make($this->data,$this->rules,$this->messages); $this->after(); } /** *Setdatatovalidate * *@returnvalidator */ publicfunctiongetValidator() { return$this->validator; } /** *Setdatatovalidate * *@return$this */ publicfunctionwith(array$data) { $this->data=$data; $this->before(); $this->validator=$this->validator->make($this->data,$this->rules,$this->messages); $this->after(); return$this; } /** *Validationpassesorfails * *@returnboolean */ publicfunctionpasses() { if($this->validator->fails()){ $this->errors=$this->validator->messages(); returnfalse; } returntrue; } /** *Returnerrors,ifany * *@returnarray */ publicfunctionerrors() { return$this->errors; } /** *Returnerrorscodes,ifany * *@returnarray */ publicfunctiongetCodes() { return$this->codes; } /** *getRules * *@returnarray */ publicfunctiongetRules() { return$this->rules; } /** *getData * *@returnarray */ publicfunctiongetData() { return$this->data; } /** *getErrors * *@returnarray */ publicfunctiongetErrors() { return$this->errors; } /** *getMessages * *@returnarray */ publicfunctiongetMessages() { return$this->messages; } /** *setRule * *@paramstring$key *@paramstring$value * *@return$this */ publicfunctionsetRule($key,$value) { $this->rules[$key]=$value; return$this; } /** *emptyRules * *@return$this */ publicfunctionemptyRules() { $this->rules=array(); return$this; } /** *sometimes * *@paramstring$attribute *@paramstring|array$rules *@paramcallable$callback * *@return$this */ publicfunctionsometimes($attribute,$rules,callable$callback) { $this->validator->sometimes($attribute,$rules,$callback); return$this; } /** *resolver * *@paramClosure$resolver * *@return$this */ publicfunctionresolver(Closure$resolver) { Validator::resolver($resolver); return$this; } /** *replacer * *@paramClosure$resolver * *@return$this */ publicfunctionreplacer($replace,Closure$resolver) { Validator::replacer($replace,$resolver); return$this; } /** *extendImplicit * *@paramClosure$resolver * *@return$this */ publicfunctionextendImplicit($extendImplicit,Closure$resolver) { Validator::extendImplicit($extendImplicit,$resolver); return$this; } /** *extend * *@paramstring$rule *@param\Closure|string$extension *@paramstring$message * *@return$this */ publicfunctionextend($rule,$extension,$message=null) { Validator::extend($rule,$extension,$message); return$this; } /** *before(extend(),resolver()) * *@return$this */ publicfunctionbefore() { } /** *after(sometimes()) * *@return$this */ publicfunctionafter() { } }
新建中间件
isMethod('POST')){ $type=$request->segment(1); if($validator){ $validator=$this->namespace.'\\'.studly_case($type).'\\'.studly_case($validator).'Validator'; $validator=new$validator($request->all()); if(!$validator->passes()){ if($request->isAjax()){ return$validator->errors()->first(); }else{ returnredirect()->back() ->withErrors($validator->getValidator()) ->withInput(); } } } } return$next($request); } }
新建TestTestValidator
['required','test','min:1'], ); /** *Validationmessages * *@varArray */ protected$messages=array( 'name.required'=>'必填', 'name.min'=>'最少1个字符', 'name.test'=>'测试', ); /** *自定义验证规则或者扩展Validator类 */ publicfunctionbefore() { $this->extend('test',function($attribute,$value,$parameters){ returnbool; }); } }
路由中如何使用
Route::post('/',['middleware'=>['valiAdmin:Test'],'uses'=>'IndexController@test']);
具体使用可以自行配置~
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。