Php 向Zend_表单添加动态子表单数量
我正在使用JS创建我的表单-它的结构为:Php 向Zend_表单添加动态子表单数量,php,zend-framework,Php,Zend Framework,我正在使用JS创建我的表单-它的结构为: <form> [other input fields here] // these rows added via JS <ul> <li> <input name="field[0][id]"> <input name="field[0][data]"> </li> <li> <input name="field[1][id]"> <input nam
<form>
[other input fields here]
// these rows added via JS
<ul>
<li>
<input name="field[0][id]">
<input name="field[0][data]">
</li>
<li>
<input name="field[1][id]">
<input name="field[1][data]">
</li>
...
</form>
职位:
getValues():
虽然我理解字段名被重命名的原因(我可以接受),但我不理解为什么最后只有一个值(即使每个子表单都有不同的名称)。Zend表单是ZF中最复杂的无理由元素之一。当您想要自定义某些元素以及它们之间的关系时,最大的问题就开始了。我不建议使用它们,因为与其他解决方案相比,您用于实现的时间至少要加倍,如果不是现在,那么用于维护的时间也要加倍。说实话,我最终没有声明子表单,但在元素上添加默认名称属性,并重载getValues/getErrorMessages以基于该值报告错误/获取值(因此-$_POST[field][0][data]成为Zend的field_0_数据,但值/错误仍然将其引用为$values[field][0][data])。这很粗糙,我希望我不需要这样做。最令人恼火的是,根据过去的版本(我在大约4年前找到的答案),这种方法(以及用索引命名输入字段的方法)应该有效。您是否曾经从您的孩子
isValid()
方法中调用过parent::isValid($data)
?应该在循环后调用它来添加子窗体。@ski4404-是的,我是。
foreach($values['field'] as $index => $values)
{
$index_form = new Zend_Form_SubForm();
$values_form = new Zend_Form_SubForm();
$data = new Zend_Form_Element_Text('data');
$values_form->addElement($data);
$index_form->addSubForm($values_form, $index);
$this->addSubForm($index_form, "field");
}
array (size=5)
-5 =>
array (size=1)
'data' => string '13' (length=2)
-4 =>
array (size=1)
'data' => string '10' (length=2)
-3 =>
array (size=1)
'data' => string '11' (length=2)
-2 =>
array (size=1)
'data' => string '12' (length=2)
-1 =>
array (size=1)
'data' => string '15' (length=2)
array (size=1)
1 =>
array (size=4)
'data' => string '15' (length=2)