我想渲染:
<input type="text" value="" name="foo[]" />
<input type="text" value="" name="bar[]" />
但是Zend_Form_Element需要一个(字符串)名称,所以我需要这样做:
$this->addElement('text', '1', array(
'belongsTo' => 'foo'
));
$this->addElement('text', '2', array(
'belongsTo' => 'bar'
));
但输出是:
<input id="foo-1" type="text" value="" name="foo[1]" />
<input id="bar-2" type="text" value="" name="bar[2]" />
我也可以接受输出:
<input id="foo-1" type="text" value="" name="foo[1]" />
<input id="bar-1" type="text" value="" name="bar[1]" />
但Zend_Form_Element重写了具有相同名称的元素
有办法做我需要的吗?
答案 0 :(得分:7)
对于多个值:
$foo = new Zend_Form_Element_Text('foo');
// Other parameters
$foo->setIsArray(TRUE);
$this->addElement($foo);
生成:name="foo[]"
-
如果您要查找name="foo[bar]"
等指定密钥,请使用:
$bar= new Zend_Form_Element_Text('bar');
// Other parameters
$bar->setBelongsTo('foo');
$this->addElement($bar);
-
在ZF 1.11.5上测试
答案 1 :(得分:0)
类MyFooForm扩展Zend_Form { public function init(){ $ fullNameOpts = array( '必要'=&GT;假, '标签'=&GT; '全名', 'IsArray的'=&GT;真, 'validators'=&gt; array(array('stringLength',false,array(1,250))) ); $ this-&gt; addElement('text','fullName',$ fullNameOpts); //其余的元素,表格和东西都在这里 } }
这确实会产生
<dd id="fullName-element"><input type="text" class="inputAccesible" value="" id="fullName"name="fullName[]"></dd>
它在Element.php上,在Form中,第512行“isArray”检查。 我正在使用常规的zend_form,使用自定义验证器进行crossValidation,并且我正在推送子表单以复制主表单,因为用户可以多次添加相同的表单。 另外,我太懒于研究自定义装饰器,我已经创建了一个,但是它会杀死子格式和数组符号,所以我只是坚持使用常规装饰,并解决它。
我在Zf 1.10。