我在视图中有一个带有下拉选项的表单字段。
GroupView
表单字段从$ selection变量获取其选项列表,这是一个嵌套数组,以帮助更容易阅读长选项列表。
echo $this->Form->input('form.selection', array('label' => 'Selection', 'type' => 'select', 'options' => $selection, 'empty' => '[None]));
我发现一个问题,如果其中一个$selection = array(
'Section 1' => array(
'1' => 'Section 1',
'2' => 'Testing 1',
'3' => 'Testing 2',
'4' => 'Testing 3'
),
'Section 2' => array(
'5' => 'Testing 4',
'6' => 'Testing 5',
'7' => 'Testing 6',
'8' => 'Testing 7'
),
);
文本与<option>
的名称相匹配,那么它会从列表中将其排除在我不希望发生的位置。
是否有合适的方法可以在不手动创建<optgroup>
元素及其中的所有选项的情况下解决此问题?
备注: 出于这个问题的目的,我已经替换了数据数组,因为它包含我不想分享的潜在敏感信息,而且只是完整数组的选择。
开发环境: CakePHP 2.8
答案 0 :(得分:2)
我只是查看了FormHelper
的{{3}}并找到了以下内容。
/* While a nested options array will create optgroups with options inside them.
* ```
* $options = array(
* 1 => 'bill',
* 'fred' => array(
* 2 => 'fred',
* 3 => 'fred jr.'
* )
* );
* $this->Form->select('Model.field', $options);
* ```
*
* In the above `2 => 'fred'` will not generate an option element. You should enable the `showParents`
* attribute to show the fred option.
因此,您需要在选择选项中将showParents
设置为true
。看这里:source
答案 1 :(得分:0)
您可以在以下链接中找到答案:
https://api.cakephp.org/2.8/class-FormHelper.html#_select
因此,您的选择表单字段代码应如下所示:
echo $this->Form->input('form.selection', array('label' => 'Selection', 'type' => 'select', 'options' => $selection, 'empty' => '[None]', 'showParents' => true));
应该添加showParents属性,值应该为true。希望这将是答案。