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
コメント