我读了这篇文章: http: //www.jeremykendall.net/2009/01/19/dynamically-adding-elements-to-zend-form/
这很有趣,而且效果很好。
我需要做同样的事情,但要使用 SubForm。我的意思是,当用户按下按钮时,我通过 ajax 调用一个操作,该操作将子表单添加、附加和显示到我现有的表单中。
例如:
我有一个表格,用户必须填写他孩子的姓名和姓氏,所以有一个“添加孩子”按钮。当用户按下该按钮时,应将子表单添加到我现有的表单并显示。提交时,它将完全像该文章中的示例一样进行验证。唯一的区别是他只添加了一个字段。我需要添加一个子表单,但方式完全相同。
我在操作中尝试了以下操作(由 Ajax 调用):
public function clonerecursivegroupAction()
{
$this->_helper->layout->disableLayout();
$ajaxContext = $this->_helper->getHelper('AjaxContext');
$ajaxContext->addActionContext('clonerecursivegroup', 'html')->initContext();
$id = $this->_getParam('id', null);
$subform1 = new Zend_Form_SubForm();
$Element1 = $subform1->createElement('text', 'text1');
$Element1->setLabel('text1')->setRequired(true);
$Element2 = $subform1->createElement('text', 'text2');
$Element2->setLabel('text2')->setRequired(false);
$subform1->addElement($Element1);
$subform1->addElement($Element2);
$this->view->field = $subform1->__toString();
}
这几乎可以工作。
此操作的视图返回 SubForm 的 html 代码,因此在我的 ajax 调用成功时,我只显示它。
问题是在提交时它会验证表单,但它丢失了刚刚添加的新子表单。只有一个元素的文章不会发生这种情况。我想我只需要将子表单添加到现有表单中,但是如何?