如何阻止CakePHP表单下拉忽略选项匹配optgroup?

时间:2017-04-06 08:51:46

标签: php cakephp

我在视图中有一个带有下拉选项的表单字段。

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

2 个答案:

答案 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

enter image description here

因此,您的选择表单字段代码应如下所示:

echo $this->Form->input('form.selection', array('label' => 'Selection', 'type' => 'select', 'options' => $selection, 'empty' => '[None]', 'showParents' => true));
应该添加

showParents属性,值应该为true。希望这将是答案。