Zend +在FormSelect中使用带括号的名称(数组表示法)视图帮助器呈现为多个select元素,而不是常规下拉列表

时间:2012-04-29 14:09:47

标签: zend-framework zend-form

在我的项目中,我需要有许多带有数组标注名称的下拉字段,如下所示:

<select name="language[]">...</select>
<select name="language[]">...</select>
<select name="language[]">...</select>

因为我需要为它渲染Zend的formSelect视图帮助器,所以我认为这很简单:

for($i = 0; $i < 3; $++){
    echo $this->formSelect('language[]', $this->languages[$i],
                                         $this->attribs[$i],
                                         $this->languageOptions[$i]);
}

但我错了:Zend不是将它们渲染为常规的下拉字段,而是决定将它们作为多选字段渲染出来,而不是将它们渲染为多选字段。

我理解这种行为背后的想法,但实际上,formSelect提供的帮助对我的需求来说太过分了。

现在,我可以使用JavaScript修改它,删除multiple="multiple"属性,将它们转换为常规下拉菜单...

但出于好奇,有没有办法让formSelect将这些元素渲染为常规下拉字段,而不是修改其底层代码?

1 个答案:

答案 0 :(得分:1)

你是对的,formSelect助手决定根据元素名称为array[]的事实使其成为多选。

但是你可以覆盖这种行为。

为此,请将multiple => false添加到您的元素$attribs列表中。

E.g。

$attribs = array('multiple' => false, 'class' => 'selection');
echo $this->formSelect('not_array[]', '', $attribs, $options);

这可以防止它试图使元素支持多个选择。