続・Laravelのバリデーションで、全角半角問題を対応(データ整形)
前置き
前に書いたLaravelのバリデーションで、全角半角問題を対応(データ整形)の最後にちょっと書いた内容です。
データ整形しても、バリデーションエラーでリダイレクトされた時の入力フォームには、データ整形が反映されないことの対策です。
メソッドをオーバーライドする
独自リクエストクラスのメソッドをオーバーライドして、リダイレクト時に整形したデータを返します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
/** * バリデーションエラー時(関数をオーバライド) */ protected function failedValidation(Validator $validator) { // 整形済みのパラメータを取得 $input = $this->all(); // oldヘルパー関数に整形済みデータを戻す $redirectResponse = redirect($this->getRedirectUrl())->withInput($input)->withErrors($validator); throw (new ValidationException($validator, $redirectResponse)) ->errorBag($this->errorBag) ->redirectTo($this->getRedirectUrl()); } |
failedValidation() をオーバーライド(上書き)して、データ整形したものをリダイレクト時の返値に入れ込みます。
見た目的にも、データ整形できました。
この方法は、Laravel6系とLaravel8系で、実際に使用しています。
この方法なら、バリデーションエラーで入力フォームに戻った時に、全角半角やカタカナ変換などのデータ整形が反映されます。