2012-12-27 74 views
2

由于某些原因,Zend Framework 1.12假设您想要多重选择时,将Zend_Form_Element_Select与setIsArray一起使用时。这看起来像是一个奇怪的框架行为,所以我认为必须有一个解决方法或另一个选项,我只是没有设置。Zend Framework 1.12选择元素 - 名称数组问题

例如,如果我使用下面的代码:

$element = $this->getElement('element'); 
$element->setIsArray(true) 
     ->setMultiOptions(array('a' => 'A')); 

我得到以下输出:

<select name="element[]" id="element" multiple="multiple"> 
<option value="a" label="A">A</option> 
</select> 

当我想所需的输出:

<select name="element[]" id="element"> 
<option value="a" label="A">A</option> 
</select> 

即我不't want multiple =“multiple”

我已经研究了解决这个问题的方法,但我不认为它们适合于像表单元素的名称中添加括号这样的简单问题。在这一点上,我正在考虑使用jquery在页面加载时删除这个多重属性,但这真的很糟糕,无法想象Zend Framework会以这种方式工作。

有谁知道如何使用上面的代码示例来做到这一点?我不想实例化zend表单select或addElement的新实例,因为已经建立了一个实例。

回答

2

因此,这是解决这个问题,使用setOptions方法具有多个=>假如在一个示例如下所示:

$element = $this->getElement('element'); 
$element->setMultiOptions(array('a' => 'A')) 
     ->setIsArray(true) 
     ->setOptions(array('multiple' => false)); 
2

ZF Issue tracker有一个非常类似的线程,你试过建议的解决方法吗?

$element = new Zend_Form_Element_Select('selectbox', array('multiple' => false)); 
$element->setIsArray(true); 
+0

谢谢。我已经在问题跟踪器中看到了这一点,事实上,我是最后一个评论和投票在这个问题上,但我不喜欢他们的解决方法,因为我需要实例化Zend_Form_Element_Select的新实例 – jsteinmann

+1

@rockstarz all你应该在大多数情况下要做的是将数组传递给setOptions():'$ element-> setOptions(array('multiple'=> false);' – RockyFord

+0

@RockyFord,就是这样!非常感谢。可以张贴作为答案我会将其标记为正确的 – jsteinmann