Laravel Form Request Validation

2022/05/06閱讀時間約 3 分鐘
在Laravel中除了用Validator來驗證資料,還可以用Form Request Validation,建立一個驗證class,在request進入controller之前,會先在這邊做驗證,若驗證失敗則不會繼續執行Controller。

建立form request:
$ php artisan make:request ArticleRequest
  • 可以發現,Form Request檔案會被建立在app/Http/Requests路徑下。
  • authorize method是用來檢查授權的,比如這是一個刪除文章的api,這邊就可以寫檢查邏輯,確認這篇文章是不是目前登入的user的,如果是才能刪除,回傳true,否則回傳false。
  • rules method則是定義驗證規則的地方。

範例程式碼:

  • messages method: 客製化錯誤訊息。
  • attributes method: 客製化錯誤欄位名稱(:attribute)。
  • 由於這個範例api是把參數帶在route中,也就是用route parameter的方式,因此Form Request的all method邏輯是把route parameter加到validation data再回傳整個array,如此在rules中才可以用'id' => 'required|integer|min:1',來定義id的format,否則沒有all method定義的話,系統會找不到id這個參數!
  • 在form request通過驗證後,在controller中$request->validated()則是可以回傳被驗證後的參數。
  • 若是authorize method回傳false,則整個api會回傳403,controller不會被執行。
  • 值得一提的是,request headers必須帶上Accept: application/json,rules method在驗證錯誤時才會回傳status code 422 的 json response,否則都會回傳404 Not Found,不會含有錯誤訊息。
為什麼會看到廣告
20會員
161內容數
留言0
查看全部
發表第一個留言支持創作者!