У меня есть немного другой способ сделать это.
Когда я создаю флажок, я также создаю идентичное скрытое поле с нулевым значением
<input type="hidden" name="my_check" value="0" />
<input type="checkbox" name="my_check" value="$value" />
Флажок, если отмечен, переопределит скрытое значение. Таким образом, когда вы отправляете форму, вы получаете $ _POST ['checkbox] = 1 или 0, но она всегда существует в $ _POST.
Хорошая особенность этого метода в том, что вы можете расширить помощник Form :: checkbox, чтобы он всегда присутствовал, и вам не приходилось беспокоиться об этом для каждой формы / контроллера.
p.s. В приведенном выше примере вы, вероятно, захотите сделать это так:
<input type="hidden" name="user_preferences_preference[$pp->id]" value="0" />
<input type="checkbox" name="user_preferences_preference[$pp->id]" value="<?= $pp ?>" />
<?= $pp->product; ?><br />
Или используйте значение $ key вместо $ pp-> id.