ハマログ

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

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日


関連記事

ITツールの機能紹介-SeleniumIDEのループを1000回以上実施する方法-

つ~じ~です。最近ちょっと体調の都合で休みがちです、皆さんも体調管理にお気を付け…

mt-daapdで自前iTunesサーバーを構築してみる

雨の日はずぶ濡れで出社するライダー藤田です。 自宅にある複数台のマシンにそれぞれ…

Laravel Passportを使ったOauthサーバ

Oauth2.0の認可サーバを構築したいと思いLaravel Passportを…


← 前の投稿

次の投稿 →