:::

10-1 建立Request來統一驗證

  1. 儲存時要驗證,未來修改時也是要驗證,那是否可以統一驗證?才不用到處都寫驗證規則?而且還可以讓控制器保持乾乾淨淨?可以,善用表單請求類(request)即可。詳情可見:https://laravel-china.org/docs/laravel/5.6/validation/1372
  2. 建立 request
    php artisan make:request ExamRequest
  3. 會產生 /專案/app/Http/Requests/ExamRequest.phpauthorize()部份是用來判別目前登入者是否有權限執行此動作(驗證後要執行的動作),若懶得設可先填入 true,以免無法使用表單。但我們因為有裝了權限控制的Backpack\PermissionManager套件,所以,直接用裡面的方法can()來判斷有無權限即可。

    public function authorize()
    {
        return $this->user()->can('建立測驗');
    }
    
  4. 再將原先規則搬入rules()中。

    public function rules()
    {
        return [
            'title'  => 'required|min:2|max:255',
        ];
    }
  5. 若需要自訂訊息,只要新增一個messages函數,並將自訂訊息移入即可。
    public function messages()
    {
        return [
            'required' => '「:attribute」為必填欄位',
            'min'      => '「:attribute」至少要 :min 個字',
            'max'      => '「:attribute」最多只能 :max 個字',
        ];
    }
  6. 若是想替欄位命名則可利用attribute來進行設定

    public function attributes()
    {
        return [
            'title'      => '測驗標題',
        ];
    }
  7. 修改 /專案/app/Http/Controllers/ExamController.php 控制器,修改 store$request 的類別改用 ExamRequest,並將原本在裡面的驗證拿掉。

    public function store(ExamRequest $request)
    {
        Exam::create($request->all());
        return redirect()->route('exam.index');
    }
  8. 在上方加入使用我們自製的 ExamRequest

    use App\Http\Requests\ExamRequest;
  9. 日後若有 update 時,也是比照辦理即可,無須在控制器裡面寫驗證。
    public function update(ExamRequest $request, $id)
    {
        //
    }

 

到GitHub觀看此單元程式異動  


:::

書籍目錄

展開 | 闔起

快速登入


http%3A%2F%2Fcampus-xoops.tn.edu.tw%2Fmodules%2Ftad_book3%2Fpage.php%3Ftbdsn%3D1171%26tbsn%3D37

計數器

今天: 2391239123912391
昨天: 4159415941594159
總計: 8069909806990980699098069909806990980699098069909