Laravel8 リクエストクラスでバリデーションエラー時にHTTPパラメーターをセットしてリダイレクトさせる方法

バリデーションエラー時は、デフォルトでは入力フォーム表示時のURLへリダイレクトされるので、POSTで値を与えて入力フォームを表示していた場合、バリデーションエラー時のリダイレクトでは正しく入力フォームが表示されない。
いろいろ回避策はありますが、題名の通りリダイレクト時にHTTPパラメーターをセットする方法となります。

リクエストクラスに以下を追記

XxxxxRequest.php

use Illuminate\Contracts\Validation\Validator;
use Illuminate\Http\Exceptions\HttpResponseException;
       ・
       ・
       ・
    protected function failedValidation(Validator $validator)
    {
        $response = redirect()->route('xxx.xxx', [
                'val_a' => $this->input('val_a'),
                'val_b' => $this->input('val_b'),
            ])
            ->withErrors($validator)
            ->withInput($this->input())
            ->with('message', 'error');

        throw new HttpResponseException($response);
    }

解説

failedValidation()をオーバーライドし、リダイレクト先のrouteを記述して、’val_a’, ‘val_b’の部分に渡したいパラメータをセットします。

        $response = redirect()->route('xxx.xxx', [
                'val_a' => $this->input('val_a'),
                'val_b' => $this->input('val_b'),
            ])

->withErrors($validator)
これがないとリダイレクト後の入力フォームでバリデーションエラーメッセージを表示することが出来ません。

@error('xxx')<p class="error_text">{{ $message }}</p>@enderror

->withInput($this->input())
これがないとリダイレクト後の入力フォームでold(‘xxx’)による値の復元が出来ません。

<input type="text" name="xxx" value="{{ old('xxx') }}">

->with(‘message’, ‘error’);
リダイレクト後の入力フォームでメッセージを表示したい時に使用します。

@if (session('message'))
    <p>{{ session('message') }}</p>
@endif

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です