不特定数のCheckboxのバリデーション

Laravel でWebアプリ開発中に躓いたので、備忘録として!結構ハマりました。JavaScriptで対応したら早かったんですが、保守性が落ちそうな気がしたので、調べて調べて辿り着きました!同じように悩んでる方いると思うんですけど、それではイってみましょう!

やりたい事:
 一覧表示(表示件数が特定されない)したデータをチェックボックスで選択させる画面で、一つもチェックが入ってなかったら、Submitした際にバリデーションで弾く!

問題点:
 常に数が変動しないcheckboxであれば、それぞれのname属性を指定してバリデーションをかけられるけど、一覧表示する場合、表示件数が条件によって変動する。そのため、予めname属性を指定したバリデーションをかけられない。
 また、一つも選択されていない場合のチェックが[array]だけでは効かない。

解決策:
 Laravel のValidateルール [present] を使って実現できた。

Html...

<tr><td><input type="checkbox" name="chk[]" value="1"/></td></tr>
<tr><td><input type="checkbox" name="chk[]" value="2"/></td></tr>
<tr><td><input type="checkbox" name="chk[]" value="3"/></td></tr>

...
PHP...

$this->validate($request, [
    'chk' => 'present|array'
], [
    'chk' => ':attributeは最低1つ選択して下さい。',
], [
    'chk' => 'チェックボックス'
]);

...

Validate rule に[array]だけでは、null(無選択)がスルーされてしまいます。
これを防ぐ為に、[present]を追加します。presentはチェック対象が存在するかをチェックしてくれます。つまり、無選択状態ではchkがnullなので、そもそも存在しないような扱いになっているのでバリデーションに引っ掛かってくれます。

同じように困った人、これでイケますよ!!