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');
}
-
在上方加入使用我們自製的 ExamRequest
use App\Http\Requests\ExamRequest;
- 日後若有
update
時,也是比照辦理即可,無須在控制器裡面寫驗證。
public function update(ExamRequest $request, $id)
{
//
}