iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 17
0
Software Development

30天快速上手Laravel系列 第 17

Day 17-[Laravel 資料夾目錄與內容] Request Validation

  • 分享至 

  • xImage
  •  

介紹

這裡要介紹的是Lravel 在驗證進來的資料時,Laravel 的Controller使用了 ValidatesRequests trait,它可以幫助我們很快速的分開驗證的邏輯。

Laravel 提供的example在比較下面才有提到Form Request的檢查,而且是分片段介紹的,這邊把它整理起來介紹。

通常會有一隻Request檔案專門處理,這樣可以在進入Controller之前就驗證。

使用方法

1.可以選擇下指令或手動建立Request
php artisan make:request ProductUpdateRequest
他會產生檔案在app\Http\Requests裡面,會有預設的兩個method authorize,rules

2.範例: ProductUpdateRequest.php
如果不下指令的話,也可以自己建立Request資料夾放置需要的Requests們),其中rules裡面會使用到laravel的驗證規則,更多驗證規則請查閱可用的驗證規則

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Http\Exceptions\HttpResponseException;

class ProductUpdateRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
      //如果授權在其他地方驗證,這邊就都先回傳true
      return true;
    }

    /**
     * Get the validation rules that apply to the request.
     ** @return array
     */
    public function rules()
    {
        return [
            'id' => 'required',
            'name' => 'required||max:100',
        ];
            }
    /**
     * Get the error messages for the defined validation rules.
     *
     * @return array
     */
     public function messages()
    {
        $messages = [
            //attribute會帶入上方rules裡面有用到require規則的屬性(id, name)
            'required' => 'The :attribute field is required.', 
        ];
    }

3.ProductController

<?php

namespace App\Http\Controllers;

use App\Services\ProductService;
use App\Http\Controllers\Controller;
use App\Http\Requests\ProductUpdateRequest; //宣告Request

class ProductController extends Controller
{
    protected $productService;

    //使用ProductUpdateRequest 驗證後的request,這樣進來的$request參數就不用再這邊另外檢查一次
    public function update(ProductUpdateRequest $request) 
    {
        $data = $this->productService->update(json_decode($request->getContent()));  
        return response()->json($data);
    }
}

其他

Request 還有配合前端實作,提供像驗證錯誤會被自動快閃至 session而不用另外宣告$errors變數,或是配合AJAX return json response,如果有興趣繼續研究的話可以參考官網。


結論: Request 是一個很好用的方法,它幫助我們抽離出資料來源的檢查,可以在一開始就作出決定要直接返回或是繼續交給後面的程序處理,是Controller的好幫手,可以幫我們先做好request data的檢查,寫出更乾淨的code。

參考連結:


上一篇
Day16-[Laravel 資料夾目錄與內容] Request
下一篇
Day18-[Laravel 資料夾目錄與內容] Middleware
系列文
30天快速上手Laravel30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言