如何优雅的使用 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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。