ハマログ

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

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日


関連記事

AWS内部のEC2サーバからメール送信する際のIPアドレス逆引き設定

はじめに AWSのIP逆引き設定に苦労したのでメモ。苦労した原因は、知識&事前調…

夏休みの宿題(JSで放物線をシミュレーションする)

はじめに 少し前に買った、「8月号増刊『60分でわかる 微分と積分』 (Newt…

分解清掃の巻

連休初日に愛車トリッカーを修理に出して現在移動手段が無い藤田です。 バイクにも代…


← 前の投稿

次の投稿 →