ハマログ

株式会社イーツー・インフォの社員ブログ

Laravel 8.* のフォームリクエストでバリデーションチェック済みの値を整形してみる

突然ですが、フォームリクエストでバリデーションチェック済みの値を整形する必要に出くわしました。

バリデーション前にリクエストを整形することはよくありますが、
バリデーション後にリクエストの整形を行うことはあまり出くわさない状況なので、
その時の作業の備忘録としてここを使わせてもらいます。

さて、あまりない状況においてどうやって実装したものかと考えました。

「バリデーション後のリクエストを整形する処理をControllerに書いてControllerを汚すのもいかがなものか

「フォームリクエストでバリデーション後のデータ整形するメソッドくらいあるだろ」

とか、

Google先生に尋ねてみたところ、どうやら「passedValidation」というメソッドが存在するということを教えてくれので、
「Laravel passedValidation」と再度先生に尋ねてみるも、肝心のLaravel公式ドキュメントが検索上位に引っかからず…

聞き方を工夫して何度か聞いてみた結果、「passedValidation」の存在確認が取れました。

 

Laravel 5.8にしっかりマージされています↓

Laravel github passedValidation

https://github.com/laravel/framework/pull/29549

 

コメントを追っていくと、
「prepareForValidation()のようにafterValidation()っていうバリデーション後の値をフィルターできたりすると便利じゃない?」っところから
初めは「afterValidation」という名前だったみたいですが、わかりづらいから「passedValidation」となったようですね。

 

Laravel 8.* にもあり「Handle a passed validation attempt」と記述されています↓

Laravel document passedValidation

https://laravel.com/api/8.x/Illuminate/Validation/ValidatesWhenResolvedTrait.html#method_passedValidation

 

ちゃんと公式の情報で裏が取れたので、早速使ってみたのですが使い方は非常に簡単。
フォームリクエストにpassedValidationメソッドを追加し、実行したい処理を書くだけ。

class HogeRequest extends FormRequest
{
    public function passedValidation()
    {
        if (str_contains($this->hoge, '-')) {
        // リクエストを整形するなんらかの処理
        $hoge = str_replace('-', '', $this->hoge);

        // 整形したデータでリクエストを上書き
        $this->merge([‘hoge’ => $hoge]);
    }
}

実装より情報収集に時間がかかりました。。。

LaravelPHP

  nishi   2022年9月16日


関連記事

PHPerがピュアJSを使うにあたって、苦しんだ点

altJSを学ぶ一貫として、ピュアなJSで実装した際に、理解に時間がかかった点を…

GNU dateで環境変数に持つ日時文字列の操作

背景など shellで日付の操作を行いたいと思いました その利用例はこんな感じで…

bitvise SSH Client × windows update

bitvise SSH Client × windows update つい最近…


← 前の投稿

次の投稿 →