我们可以使用FormRequest封装表单验证代码,从而简化Controller中的代码逻辑,使其专注于业务。独立的表单验证逻辑可以在其他请求中重复使用。看过几篇文章,大部分都是讲如何创建Request的。表面上看是逻辑和业务分离了,但是如果不复用,一个业务新建一个Request类就太累了。这里我把项目所有的表单验证都放在了一个Request类中,实现了很高的复用性。下面是具体实现。首先创建Requestphpartisanmake:requestCreateUserRequestCreateUserRequest代码块'required|between:2,4','Student.userAge'=>'required|integer','Student.userSex'=>'required|integer','Student.addr'=>'必填',];//这里我只写了一些字段,你可以定义所有字段protected$strings_key=['Student.userName'=>'Username','Student.userAge'=>'Age','Student.userSex'=>'性别','Student.addr'=>'地址',];//这里我只写了一些情况,你可以定义protected$strings_val=['required'=>'asrequired','min'=>'minimum:min','max'=>'maximum:max','between'=>'lengthbetween:minand:max','integer'=>'requiredisaninteger','sometimes'=>'',];/***判断用户是否有权发出这个请求英石。**@returnbool*/publicfunctionauthorize(){returntrue;//修改为true}/***获取适用于请求的验证规则。**@return数组*/publicfunctionrules(){$rules=$this->rules;//根据不同的情况,添加不同的验证规则if(Request::getPathInfo()=='/save')//如果是保存方法{$rules['Student.地址']='有时';}if(Request::getPathInfo()=='/edit')//如果是编辑方法{$rules['Student.addr']='required|min:5';}返回$规则;}//错误信息返回给前台publicfunctionmessages(){$rules=$this->rules();$k_array=$this->strings_key;$v_array=$this->strings_val;foreach($rulesas$key=>$value){$new_arr=explode('|',$value);//拆分成数组foreach($new_arras$k=>$v){$head=strstr($v,':',true);//截取:前一个字符串如果($head){$v=$head;}??$array[$key.'.'.$v]=$k_array[$key].$v_array[$v];}}返回$array;}}controlDevicespecificmethod/***显示创建新资源的表单。**@return\Illuminate\Http\Response*/publicfunctionsave(\App\Http\Requests\CreateUserRequest$request){//这里会自动调用表单验证//验证成功后继续往下执行$data=$请求->输入('学生');if(User::create($data)){returnredirect('/')->with('success','添加成功!');}else{returnredirect('/create')->with('error','Addfailed!');}}对应模板文件
