Чекбоксы CakePHP - игнорировать невыбранные чекбоксы

Надеюсь, это будет хороший простой вопрос.

В форме у меня есть несколько флажков, относящихся к выбору различных пользователей для определенной функции. Флажок создан так

$this->Form->input("user_select", array(
  "type"   => "checkbox",
  "name"   => "data[Registration][User][]",
  "id"     => "UserId" . $user['User']['id'],
  "value"  => $user['User']['id'],
  "label"  => false
));

Когда эта форма отправляется, она поступает в контроллер регистрации, но массив request-> data содержит флажки, которые также не выбраны в формате:

array(
  'Registration' => array(
    'Users' => array(
      (int) 0 => '0',
      (int) 1 => '0',
      (int) 2 => '0',
      (int) 3 => '0',
      (int) 4 => '31',
      (int) 5 => '0',
      (int) 6 => '11'
    ),
)

Теперь с данными все в порядке, ясно видно, что выбраны пользователи 31 и 11, но я бы предпочел массив в форме:

array(
  'Registration' => array(
    'Users' => array(
      (int) 4 => '31',
      (int) 6 => '11'
    ),
)

Это значительно упростит обработку и проверку.

Итак, Есть ли у CakePHP возможность предотвратить отображение невыбранных флажков в массиве request-> data?


person Rob Forrest    schedule 09.10.2012    source источник


Ответы (2)


Попробуйте добавить 'hiddenField' => false к вашему вызову input ():

$this->Form->input("user_select", array(
  "type"        => "checkbox",
  "name"        => "data[Registration][User][]",
  "id"          => "UserId" . $user['User']['id'],
  "value"       => $user['User']['id'],
  "label"       => false,
  "hiddenField" => false
));

CakePHP автоматически добавит скрытое поле, если вы не скажете ему этого не делать, предположительно, чтобы все ключи формы были представлены в $this->data->request. Посетите эту страницу для получения дополнительной информации.

person Khior    schedule 09.10.2012
comment
Прекрасная работа там, это именно то, что я искал. - person Rob Forrest; 09.10.2012

Форма фиксации всегда будет возвращать все флажки, отмечены они или нет. Вам решать, что делать с этими данными. Насколько я знаю, в CakePHP нет такой функции, которую вы просите, но вы всегда можете использовать PHP для отмены установки пустых элементов ...

 foreach( $array as $key => $val ) {
   if( empty($val) ) {
     unset( $array[$key] );
   }
 }
person Grzegorz Motyl    schedule 09.10.2012
comment
Это то, чем я занимаюсь, но мне бы хотелось иметь более чистое и универсальное решение, если оно существует. - person Rob Forrest; 09.10.2012