バリデーションエラー時は、デフォルトでは入力フォーム表示時の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