首先 BaseValidator基类
<?php
namespace App\Http\Requests;
use Illuminate\Support\Facades\Validator;
class BaseValidator
{
/**Validator基类方法。验证失败就抛出异常
* Notes:
* User: ChenJulong
* Date: 2019/7/16
* Time: 17:09
* @param $data
* @param bool $scen
* @param $rules
* @param $message
*/
public function yanzheng($data,$scen=false,$rules,$message){
if (is_array($scen)){
foreach ($scen as $k){
//删除scen中没有的验证参数
$rules_new[$k]=$rules[$k];
}
$validator=Validator::make($data,$rules_new,$message);
}else{
//如果不存在数据验证分组,直接make
$validator=Validator::make($data,$rules,$message);
}
if ($validator->fails()){
//验证数据不通过,跑出异常
$arr=array(
'message'=>$validator->errors()->first() ,
'date'=>'参数错误',
'status'=>800,
);
exit(json_encode($arr,JSON_UNESCAPED_UNICODE));
}
}
}
再设置UserValidator
<?php
namespace App\Http\Requests;
class GoodsValidator extends BaseValidator
{
protected $rules=array(
'name'=>'required',
'pass'=>'required',
'test'=>'required'
);
protected $message=array(
'name.required' => '用户名不能为空',
'pass.required'=>'密码不能为空',
);
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return false;
}
/**自定义的scen,数据分组。可以传入此值作为只验证那些信息
* Notes:
* User: ChenJulong
* Date: 2019/7/16
* Time: 17:05
* @param bool $scen
* @return bool|mixed
*/
public function scen($scen=false){
$s=array(
'login'=>['name','pass'],
);
if ($scen){
return $s[$scen];
}else return false;
}
/**
* Notes:
* User: ChenJulong
* Date: 2019/7/16
* Time: 16:28
* @param $data
*/
public function check($data,$scen=false){
$this->yanzheng($data,$this->scen($scen),$this->rules,$this->message);
}
}
最后再控制器中调用
public function test(Request $request){
$input=$request->all();
(new GoodsValidator())->check($input);
}
没找到laravel5.8中再哪里可以用Request::all()之类的方法来获取参数,才开始接触laravel。
不然的话还可以更优雅一点。
自己加了一个类似于thinkphp的scen 来作为只验证那些参数
申研社-陈杰