Laravelのbladeファイルでoldヘルパを使って直前に入力した情報を保持することはよくあるでしょう。しかし要件によってはフィルター済みの値(全角を半角に変換済みの値)をoldヘルパで使いたい場面があるでしょう。

Controller内でやる場合には、以前の記事でfailedValidationをオーバーライドしてリダイレクトバックを無効にすることでsession()->flash()する方法などありますが、FormRequest内で完結したい場合には元のfailedValidation処理に少々手を加えてオーバーライドしてあげましょう。

以下のようにredirect()ヘルパのwithInputに手を加えたinputを渡してあげましょう。

    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です。

お疲れ様でした。

おすすめの記事