【Laravel】条件別にバリデーションの内容を変えたい

Laravel

Laravelでフォームの内容でバリデーションをかけたいですが、少し複雑な条件でした。
(内容ぼかしてますが)具体的には、ラジオボタンでAとBを選択できる状況で、それぞれの結果次第でバリデーションの内容を分けるようにしたかった場合でした。
この記事は、その時に対応した方法です。

結論からいうと、withValidatorメソッドとsometimesメソッドを使うことで解決しました。

まずは、フォームリクエスト用のクラスの中で、rulesとmessagesのメソッドが予めあると思いますが、新たにwithValidatorメソッドを追加します。

その際には、引数にはValidatorとして下さい。

    public function withValidator(Validator $validator)
    {

        $validator->sometimes('reason', 'required | text', function ($input) {
            return $input->type === '1';
        });
      
    }

そして、sometimeメソッドを使用します。
引数は、こちらとなります↓
第1引数:フィールドの名前。配列にすれば複数でも可能です
第2引数:追加するルールのリスト
第3引数:クロージャー trueを返せばルールが適用されます

ちょっとひねりのあるバリデーションはLaravelではきちんと考慮されているのですね。
ドキュメントはこちらとなります。

バリデーション 8.x Laravel

コメント

タイトルとURLをコピーしました