Laravelのバリデーションって書きやすくて良いいですよね。
かゆいところに手が届く感じ。
どんな使い方が出来るかはドキュメントに詳しく記載されているのですが、
バリデーションルールの指定方法には大きく2タイプあるものの片方しか紹介されていなくて、いつも調べる事になるのでメモメモ。
複数条件をパイプで繋ぐタイプ
これはドキュメントにも例が載っているタイプ。
$rules = [
'name' => 'required|max:40',
'gender' => 'required|in:male,female',
'age' => 'digits_between:0,150',
'use_discount' => 'boolean',
'coupon' => 'required_if:use_discount,1|regex:/^[0-9a-zA-Z]{20}$/',
];
各情報に対して、複数のルールを「|」(パイプ)でつなげます。
とてもシンプルで良いですね。
パイプの代わりに配列で指定するタイプ
正規表現でパイプとか使う場合にはこちらのタイプを使います。ドキュメントにも書いてある
http://readouble.com/laravel/5/1/ja/validation.html#rule-regex
でも「配列で指定する必要がある」って言われても例が無いととっつきにくいのよね
$rules = [
'name' => ['required', 'max:40'],
'gender' => ['required', 'in:male,female'],
'age' => ['digits_between:0,150'],
'use_discount' => ['boolean'],
'coupon' => ['required_if:use_discount,1', 'regex:/^[0-9a-zA-Z]{20}$/'],
];
動的に条件を追加したい時とかはこちらのタイプのほうが使いやすいので、そういった視点でどちらのタイプを使うか選んでもいいと思う。