【Laravel】フォームリクエストのバリデーションでリダイレクト前に任意の処理を行う

えび

Laravelのフォームリクエストバリデーションを使用すると、
入力値が不正な場合に問答無用で前のページにリダイレクトされる。

このような時、例えば違うページに飛ばしたり、リダイレクト前にセッションなどにデータを保存したい場合はAfterフックを追加して対応する

Afterフックを追加

  • exampleRequest
<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class exampleRequest 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()
    {
        return [
            // ここにルールを記載
        ];
    }

    /**
     * ⭐️ このメソッドを追記
     * @param $validator
     */
    public function withValidator($validator)
    {
        // バリデーション完了後
        $validator->after(function ($validator) {
           // 入力エラーがあった場合
           if ($validator->errors()->any()) {
             // 任意の処理を実装
           }
        });
    }
}

メソッド内で入力値のデータを参照したい場合は
$this->{name} で取得できる

例えばemailフィールドの場合は $this->email

シンプルにリダイレクト先だけ変更したい場合

  • フォームリクエストクラスに下記メソッドを追加すればOK
// URLで指定する場合
protected $redirect = '/example';

// ルート名を指定する場合
protected $redirectRoute = 'example.index';

\ 案件のご依頼・ご相談はこちらから /