初めまして、翔平です。
昔から、周りにいる人を笑顔にしたくて、色々やってきましたがブログを書いて更に笑顔が広がれば良いなと思い開設しました!
下らない記事が多いかと思いますが、、笑
皆んなが笑顔になれますように!

初めまして、翔平です。
昔から、周りにいる人を笑顔にしたくて、色々やってきましたがブログを書いて更に笑顔が広がれば良いなと思い開設しました!
下らない記事が多いかと思いますが、、笑
皆んなが笑顔になれますように!

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なので、そもそも存在しないような扱いになっているのでバリデーションに引っ掛かってくれます。
同じように困った人、これでイケますよ!!