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