CakePHP4 でチェックボックスを必須にするバリデーション

こんな簡単なことがドキュメントを読んでもわからなかったのでメモ。

<?php
public function validationDefault(Validator $validator): Validator
{
    $validator
        ->multipleOptions('checkboxes', ['min' => 1], '選択してください。')
        
        return $validator;
}

multipleOptions で multiple ルールが追加されます。 2つ目の引数が下記の Validation:multiple() の2つ目の引数となります。(厳密には違います。Validator:multipleOptions() 参照)

in, max, min が指定できますが、必須にしたいだけなので min を 1 に設定しています。


ビューの方では選択肢を DB で管理するようにしていると下記のように ._idsチェックボックスを作っていると思います。

<?= $this->Form->select('checkboxes._ids', $checkbox_list, ['multiple' => 'checkbox']) ?>

これではエラーメッセージが表示されないので、明示的にエラーメッセージを表示させましょう。

<?= $this->Form->select('checkboxes._ids', $checkbox_list, ['multiple' => 'checkbox']) ?>
<?= $this->Form->error('checkboxes') ?>