在我的项目中,我需要有许多带有数组标注名称的下拉字段,如下所示:
<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
将这些元素渲染为常规下拉字段,而不是修改其底层代码?
答案 0 :(得分:1)
你是对的,formSelect
助手决定根据元素名称为array[]
的事实使其成为多选。
但是你可以覆盖这种行为。
为此,请将multiple => false
添加到您的元素$attribs
列表中。
E.g。
$attribs = array('multiple' => false, 'class' => 'selection');
echo $this->formSelect('not_array[]', '', $attribs, $options);
这可以防止它试图使元素支持多个选择。