Php 向Zend_表单添加动态子表单数量

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

我正在使用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 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)