laravel で相関バリデーションをシンプルに実装
はじめに
フォーム等の入力があるシステムでは、必ず実装しなければならないバリデーション処理。
Laravel では、標準で便利なバリデーションルールが定義されています。しかし、シンプルなチェックであれば実装は容易ですが、フォームが少し複雑になると、どのように実装するか悩むことも多いのではないでしょうか?
今回は Laravel で相関バリデーション(あるフィールドのバリデーションが他のフィールドの値に依存する)を実装する方法を解説します。
環境
- PHP 8.2.3
- Laravel 10.29.0
実装例
-
type
というフィールドがA
の場合、input_a
フィールドは必須とする。 -
type
というフィールドがB
の場合、input_b
フィールドは必須とする。
上記のようなルールの場合下記のような実装になります
public function rules(): array
{
return [
'type' => ['required', 'in:A,B,C'],
'input_a' => ['required_if:type,A'],
'input_b' => ['required_if:type,B']
];
}
また required_if
を設定しつつ、更にルールを追加する事もできます。
public function rules(): array
{
return [
'type' => ['required', 'in:A,B,C'],
'input_a' => ['required_if:type,A', 'nullable', 'numeric'],
'input_b' => ['required_if:type,B', 'nullable', 'numeric']
];
}
numeric
ルールを追加しました。
ここで重要なのは、nullable
ルールも同時に追加する必要がある点です。
nullable
を追加しない場合、numeric
ルールが有効化され、type
フィールドの値にかかわらず、入力は必須となり、さらにその値が数値でなければチェックを通過できません。
まとめ
元々相関バリデーションの実装時は条件分岐で適応させるルールを切り替えていたのですがrequired_if
を使うことで記述が非常にシンプルになりました。
今回紹介したrequired_if
の他にもrequired_unless
、required_with
、required_without
など、様々な条件付きバリデーションルールが用意されています。
用途に応じて使い分けて行きましょう!
私たち BABY JOB は、子育てを取り巻く社会のあり方を変え、「すべての人が子育てを楽しいと思える社会」の実現を目指すスタートアップ企業です。圧倒的なぬくもりと当事者意識をもって、こどもと向き合う時間、そして心のゆとりが生まれるサービスを創出します。baby-job.co.jp/
Discussion