laravel request 类进行form表单验证
为了简化controller参数验证,我们单独建立一个文件夹,作为我们参数层验证;具体异常抛出,以及Form
首先在app\http的文件夹下创建一个新的文件件Requests,进入新创建的文件夹Requests,可以在创建一个文件夹Nav,用于区分不同业务的功能。也可以不用创建
在新创建的文件夹下,创建一个类,例如NavRequest
<?php namespace App\Http\Requests\Nav; use Illuminate\Foundation\Http\FormRequest; class NavRequest extends FormRequest { public function authorize() { return true; } public function rules() { $rules = [ 'h5_id' => 'required |exists:h5_template,h5_id', 'font_color'=>'string|nullable', 'select_color'=>'string|nullable', 'background_color'=>'string|nullable', 'position'=>'int|required| between:0,1' ]; return $rules; } public function messages() { $message = [ 'h5_id.required' =>'h5_id必须填写', 'h5_id.exists' =>'h5_id不存在!', 'position.required' =>'请选择位置!' ]; return $message; } } //第一个方法:authorize(),控制用户访问权限 //第二个方法:$rules(),返回验证的数组 //第三个方法:$message(),返回自定义的错误信息
然后创建一个控制器例如UserController
<?php namespace App\Http\Controllers; use App\Http\Requests\Nav\NavRequest; public function index(NavRequest $request) //使用刚刚创建的Request类 { $data = $request->all(); dd($data); }
但是此时出现了一个问题,就是无论怎么样,都不会提示报错信息,而只是不合乎要求就返回首页
这时我们可以重写FormRequest这个类的方法
例如:创建一个RequestController类继承FormRequest并重写其中的方法
//1.在这里可以重新定义一个requestController类,, //2.然后让他继承 FormRequest, //3.最后重写FormRequest这个基类的failedvalidation方法。另一种方法就是直接到FormRequeste类中将该方法进行更改也可以
class RequestController extends FormRequest { protected function failedValidation(Validator $validator) { $error= $validator->errors()->all(); throw new HttpResponseException(response()->json(['msg'=>'error','code'=>'500','data'=>$error[0]], 500)); } } 这样当你的参数不符合要求时就可以返回相对应的错误信息了