В моей форме есть длинный ряд флажков, которые я хочу показать как два столбца флажков (по причинам, связанным с представлением). Поэтому в следующем коде я разделяю параметры на два отдельных массива и создаю два разных варианта с тем же именем. Когда я debug($this->request->data);
ключ «location» всегда пуст. Однако один и тот же код работает как один вход. Что я делаю не так?
<?php $count = count($location_options); //$location_options is passed from the controller $half = round( $count/2 ); $location_options1 = array_slice($location_options, 0, $half, TRUE); $location_options2 = array_slice($location_options, $half, NULL, TRUE); //I CAN'T GET THIS TO WORK!! //echo $this->Form->input('location', array('type'=>'select', 'multiple'=>'checkbox', 'options'=>$location_options1, 'div'=>array('class'=>'col-xs-12 col-sm-6 form-group', 'style'=>'margin-bottom:0;', 'selected'=>$user_location_alert_tag_ids))); //echo $this->Form->input('location', array('type'=>'select', 'multiple'=>'checkbox', 'options'=>$location_options2, 'div'=>array('class'=>'col-xs-12 col-sm-6 form-group', 'selected'=>$user_location_alert_tag_ids))); //BUT THIS WORKS JUST FINE echo $this->Form->input('location', array('type'=>'select', 'multiple'=>'checkbox', 'options'=>$location_options, 'div'=>array('selected'=>$user_location_alert_tag_ids))); ?>
Посмотрите на сгенерированный HTML, для каждого элемента select создается скрытое поле, которое гарантирует, что соответствующий ключ будет присутствовать в данных.
Несколько полей с тем же именем будут вызывать несколько скрытых полей, где последняя будет перезаписывать предыдущие.
Этого можно избежать, используя опцию hiddenField
для дополнительных полей, так что поле скрытого инициализатора генерируется только для первого ввода. Цитата из документов:
Если вы хотите создать несколько блоков входов в форме, которые все сгруппированы вместе, вы должны использовать этот параметр для всех входов, кроме первого. Если скрытый ввод находится на странице в нескольких местах, будет сохранена только последняя группа значений ввода.
Также вы должны определить уникальный идентификатор для обоих входов, иначе вы получите недействительный HTML, поскольку помощник будет создавать повторяющиеся идентификаторы.
И последнее, но не в последнюю очередь ваши скобки, вероятно, немного неправильны, selected
ключ вложен в ключ div
, который, как я полагаю, неверен, если это нужно для определения выбранных записей.
echo $this->Form->input('location', array( 'id' => 'location1', 'type' => 'select', 'multiple' => 'checkbox', 'options' => $location_options1, 'div' => array('class' => 'col-xs-12 col-sm-6 form-group', 'style'= > 'margin-bottom:0;') 'selected' => $user_location_alert_tag_ids ))); echo $this->Form->input('location', array( 'id' => 'location2', 'type' => 'select', 'multiple' => 'checkbox', 'options' => $location_options2, 'div' => array('class' => 'col-xs-12 col-sm-6 form-group'), 'selected' => $user_location_alert_tag_ids 'hiddenField' => false )));