使用 Laravel 請求類來驗證表單請求

cangsongbayu發表於2020-01-07

控制器方法中的某些業務流程經常是重複的 ,比如輸入驗證 、使用者認證 、授權等

如果想要一個結構來進行規範化 ,可以使用 Laravel 的表單請求可以將這些常見行為從控制器方法中提取出來

表單請求是一個自定義的請求類 。它的目的是對映到提交表單 、負責驗證請求 、授權使用者 ,並將使用者重定向到失敗的驗證( 可選 )

php artisan make:request CreateCommentRequest

建立出的檔案內容如下

// app/Http/Requests/CreateCommentRequest.php
<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class CreateCommentRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        // 這個方法如果返回 true ,使用者就會被授權執行對應的請求( 不知道對應的請求是什麼別急 ,繼續往下看 )
        // 如果返回 false ,Laravel 會返回 403 Forbidden 錯誤 ,而不執行路由程式碼
        return false;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        // 這個方法返回一個規則陣列
        // 如果對應的請求沒有通過這個驗證規則 ,就會像 Laravel 控制器的 validate() 方法一樣( 將使用者重定向到上一頁 ,並快閃記憶體使用者輸入以及錯誤資訊 )
        // 這裡不理解的可以參考下 Laravel 的 "驗證器" 和 "訊息包"
        return [
            //
            'title' => 'required'
        ];
    }
}

使用表單請求很簡單 ,我們以上面例子中生成的表單請求類為例

// 任何指定 (type-hint) 表單請求的路由都會自動進行 App\Http\Requests\CreateCommentRequest 中定義的驗證
Route::post('comments', function(App\Http\Requests\CreateCommentRequest $request){
    //
});
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章