STERFIELD

Laravelのバリデーションで2つ以上の項目を関連付ける

Laravelのバリデーションで2つ以上の項目を関連付ける

現在初めてPHPフレームワークのLaravelを用いた開発を行っています。
今回の開発で何度か引っかかった箇所の一つにフォームのバリデーションがあります。
この記事では2つ以上の項目を関連付けたバリデーションに関して説明していきます。

2つ以上の項目を関連付けたバリデーションとは


例えば電話番号を記入する項目を作成する場合、上記のように
3つの入力項目に分ける、というシチュエーションがよくあるかと思います。
この場合、電話番号そのものが必須項目であれば、3つ全てにrequired(必須)を適用してやれば終了です。
しかし、電話番号そのものが必須項目でない場合は少し厄介なことになります。


というのも、3つ全ての項目で空欄を許可してしまうと、上記画像のような不完全な電話番号を
許容してしまうことになるからです。ここで表題通り、2つ以上の項目の関連付けが必要になります。
今回でいうと電話番号そのものは必須の値ではないが、3つの項目のうち1つでも入力が有った場合は、
残る2つの項目の入力も義務付ける必要が出てくる
、ということになりますね。

解決方法

電話番号の入力項目のフィールドがそれぞれtel_1、tel_2、tel_3だった場合のバリデーション記法は、

となります。以下、解説を行っていきます。

まずnullableで文字通り空欄(null)を許可しています。重要なのは、その次のrequired_unlessです。
required_unlessとは、もし他の値が〇〇でなければ必須、という意味のバリデーションコードです。
直後のカンマ区切りの後の””の箇所でその〇〇の値を渡してやることで機能します。
今回のtel_1のバリデーションは、まず最初に空欄を許可
その後で「tel_2」が「””」、すなわち空欄でなければ必須
「tel_3」が「””」、すなわち空欄でなければ必須...
というようにお互いの項目の関連付けを行っているという意味になります。

これを3つの各項目に記述することで、3つの項目のうち1つでも入力が有った場合は、
残る2つの項目の入力も義務付ける、
というバリデーションを実現することができます。

Author Profile

著者近影

スターフィールド編集部

SHARE

合わせて読みたい