laravel5.1のバリデーションを使って、チェックボックスにチェックが入っていなければ、指定フィールドを入力必須にする方法。
1, 結論から言うと、以下のようにすればOK!(required_unlessを使う)
1 2 3 4 5 6 |
// Validateルール(チェックする項目と内容)を指定 $rules = [ // checkbox1にチェックが入っていなければ、input1は必須! // checkboxのvalue=1の場合 'input1' => ['required_unless:checkbox1', 1], ]; |
2, この2種類が、まぎらわしくて混乱した。
a, 「指定フィールドそのものが存在していない」場合は必須
b, 指定フィールドに「指定した値」が存在しない場合は必須)
https://readouble.com/laravel/5.1/ja/validation.html#rule-required-unless
a, 「指定フィールドそのものが存在していない」場合は必須
required_without:foo,bar,…
フィールドは、指定された他のフィールドのうちどれかが存在しない場合のみ、この項目が入力されていることをバリデートします。
b, 指定フィールドに、「指定した値」が存在しない場合は必須)
required_unless:他のフィールド,値,…
引数で指定された他のフィールドフィールドが、値のどれとも一致しない場合に、このフィールドが入力されていることをバリデートします。
今回やりたい事はrequired_unlessだったんだよね…。
required_withoutを使う時って、動的に入力フィールドを生成する場合だけか?
3, バリデーションのエラーメッセージ
validation.required_unless
何もしないとrequired_unlessの全エラーメッセージ(フィールドに関係なく)が、以上のように同じ表示がされてしまう。
対策としては、任意の日本語を設定する
resource/lang/ja/validataion.php
1 2 3 4 5 |
'custom' => [ 'input1' => [ 'required_unless' => 'checkbox1がチェックされていない場合は、input1は必須です', ], ], |
チェックが入っていたら必須の場合は、素直&簡単(required_ifを使う)
ラジオボタンやセレクトボックスの場合でも同じ(この値だったら~)
1 2 3 4 5 6 |
// Validateルール(チェックする項目と内容)を指定 $rules = [ // checkbox1にチェックが入ってたら、input1は必須! // checkboxのvalue=1の場合 'input1' => ['required_if:checkbox1', 1], ]; |
laravelのバリデーションは簡単に実装出来るけど、if文のような条件分岐だと、慣れが必要だな。
まあ、いい勉強になった。