:::
主內容區域
10-1 建立Request來統一驗證
- 儲存時要驗證,未來修改時也是要驗證,那是否可以統一驗證?才不用到處都寫驗證規則?而且還可以讓控制器保持乾乾淨淨?可以,善用表單請求類(request)即可。詳情可見:https://laravel-china.org/docs/laravel/5.6/validation/1372
- 建立 request
php artisan make:request ExamRequest -
會產生
/專案/app/Http/Requests/ExamRequest.php,authorize()部份是用來判別目前登入者是否有權限執行此動作(驗證後要執行的動作),若懶得設可先填入true,以免無法使用表單。但我們因為有裝了權限控制的Backpack\PermissionManager套件,所以,直接用裡面的方法can()來判斷有無權限即可。public function authorize() { return $this->user()->can('建立測驗'); } -
再將原先規則搬入
rules()中。public function rules() { return [ 'title' => 'required|min:2|max:255', ]; } - 若需要自訂訊息,只要新增一個messages函數,並將自訂訊息移入即可。
public function messages() { return [ 'required' => '「:attribute」為必填欄位', 'min' => '「:attribute」至少要 :min 個字', 'max' => '「:attribute」最多只能 :max 個字', ]; } -
若是想替欄位命名則可利用attribute來進行設定
public function attributes() { return [ 'title' => '測驗標題', ]; } -
修改
/專案/app/Http/Controllers/ExamController.php控制器,修改store,$request的類別改用ExamRequest,並將原本在裡面的驗證拿掉。public function store(ExamRequest $request) { Exam::create($request->all()); return redirect()->route('exam.index'); } -
在上方加入使用我們自製的
ExamRequestuse App\Http\Requests\ExamRequest; - 日後若有
update時,也是比照辦理即可,無須在控制器裡面寫驗證。public function update(ExamRequest $request, $id) { // }
10. 表單驗證及錯誤處理
