ハマログ

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

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トラブル解決録-CodeCommitで認証ができない-

つ~じ~です。先週回線の調子が悪くて記事アップできませんでした。 いい加減ブログ…

TextWranglerと正規表現で大量ファイルを一括置換

大量のHTMLファイル内に記述されたjsのパスを一括で置換したくなりました。 自…

JAX-RSでREST形式のサービスを作成するの巻

こんにちは、かねこです。 はじめに REST(Representational …


← 前の投稿

次の投稿 →