為了簡化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)); } } 這樣當你的參數不符合要求時就可以返回相對應的錯誤信息了