ハマログ

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

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のRDSをアップグレードのためテスト

こんにちはいけしまです。たてつづけにブログ投稿。 もうひとつ前のブログで書いたR…

IOT!IOT!でもユビキタスと何が違うの?

どうも!最近、子供の名前が中々決まらない宇都宮です! ”宇都宮 ○”←漢字一文字…


← 前の投稿

次の投稿 →