在我的表单中有一长串复选框,我想将其显示为两列复选框(出于与演示相关的原因)。因此,在以下代码中,我将选项拆分为两个单独的数组,并使用相同的名称创建两个不同的选项。当我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)));
?>
答案 0 :(得分:3)
查看生成的HTML,为每个select元素生成一个隐藏字段,以确保数据中存在相应的键。
具有相同名称的多个字段将导致生成多个隐藏字段,其中最后一个字段将覆盖以前的字段。
对于其他字段,可以使用the hiddenField
option来避免这种情况,以便仅为第一个输入生成隐藏的初始化字段。从文档引用:
如果要在窗体上创建多个输入块,这些输入块全部组合在一起,则应在除第一个输入之外的所有输入上使用此参数。如果隐藏的输入位于多个位置的页面上,则只保存最后一组输入值。
此外,您应该为两个输入定义唯一的ID,否则您最终将得到无效的HTML,因为帮助程序将生成重复的ID。
最后但并非最不重要的是,你的括号可能有点错误,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
)));