Laravelのbladeファイルでoldヘルパー関数を使って直前に入力した情報を保持することはよくあるでしょう。ですが要件によってはフィルター済みの値(全角を半角に変換済みの値など)をoldヘルパ関数で使用できるようにしたいと言われることもありますね。

これを実現するために Controller で処理したい場合には、以前の記事でfailedValidationをオーバーライドしてリダイレクトバックを無効にすることでController内でsession()->flash()することでold_inputを上書きしてあげる方法などがありますが、FormRequest内で完結したいと思う方も多いでしょう。

FormRequest内で場合には元のfailedValidation処理に少々手を加えてオーバーライドしてあげましょう。

以下のようにredirect()ヘルパのwithInputにフィルター済みのinputを渡してValidationException に渡してあげましょう。

private function filter()
{
    $input = $this->all();
    ///フィルター処理
    
    return $input;
}

protected function failedValidation(Validator $validator)
{
    // フィルター済みのパラメータを取得
    $input = $this->filter();
    // old()ヘルパでfilter済みのinputを使用するためにwithInput()に渡す
    $redirectResponse = redirect($this->getRedirectUrl())->withInput($input)->withErrors($validator);
    throw (new ValidationException($validator, $redirectResponse))
        ->errorBag($this->errorBag)
        ->redirectTo($this->getRedirectUrl());
}

後はbladeからold('hogehoge')などで呼び出してあげればOKです。

お疲れ様でした。

おすすめの記事