其他驗證方法

1)表單請求驗證

你可以建立一個表單請求,它可以儲存應用程式中特定請求的授權邏輯,驗證規則和錯誤訊息。

make:request Artisan CLI 命令生成類並將其放在 app/Http/Requests 目錄中:

php artisan make:request StoreBlogPostRequest

可以使用此請求的授權邏輯覆蓋 authorize 方法:

public function authorize()
{        
    return $this->user()->can('post');
}

可以使用此請求的特定規則覆蓋 rules 方法:

public function rules()
{
    return [
        'title' => 'required|unique:posts|max:255',
        'body' => 'required',
    ];
}

可以使用此請求的特定訊息覆蓋 messages 方法:

public function messages()
{
    return [
        'title.required' => 'A title is required',
        'title.unique' => 'There is another post with the same title',
        'title.max' => 'The title may not exceed :max characters',
        'body.required' => 'A message is required',
    ];
}

為了驗證請求,只需在相應的控制器方法上鍵入提示特定的請求類。如果驗證失敗,將傳送錯誤響應。

public function store(StoreBlogPostRequest $request)
{
    // validation passed
}

2)手動建立驗證器

為了獲得更大的靈活性,你可能需要手動建立 Validator,並直接處理失敗的驗證:

<?php    
namespace App\Http\Controllers;

use Validator;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class PostController extends Controller
{
    public function store(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'title' => 'required|unique:posts|max:255',
            'body' => 'required',
        ]);

        if ($validator->fails()) {
            return redirect('post/create')
                    ->withErrors($validator)
                    ->withInput();
        }

        // Store the blog post...
    }
}

2)流利地建立規則

有時你可能需要動態建立獨特的規則,在服務提供商中使用 boot() 方法可能會超出頂部,從 Laravel 5.4 開始,你可以使用 Rule 類流暢地建立新規則。

作為一個例子,當你想插入或更新使用者時,我們將使用 UserRequest。現在我們想要一個名字,電子郵件地址必須是唯一的。使用 unique 規則的問題在於,如果你正在編輯使用者,他們可能會保留相同的電子郵件,因此你需要從規則中排除當前使用者。以下示例顯示瞭如何通過使用新的 Rule 類輕鬆完成此操作。

<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;

class UserRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules(Request $request)
    {
        $id = $request->route()->getParameter('user');

        return [
            'name'           =>  'required',
            
            // Notice the value is an array and not a string like usual
            'email'         =>  [
                'required',
                Rule::unique('users')->ignore($id)
            ]
        ];
    }
}