Php 是否有一种方法可以使用Zend_表单创建不同的子/表单,并将它们合并为一个表单?

Php 是否有一种方法可以使用Zend_表单创建不同的子/表单,并将它们合并为一个表单?,php,zend-framework,zend-form,Php,Zend Framework,Zend Form,我试图在Zend中创建一个基本表单,它是许多其他表单的一部分。 以下3个元素可以是子表单,也可以是作为较大表单一部分的小表单: -名字 -年龄 -地址 我只想在不同的地方重复使用同一个表单,有时会添加“shipping address”等元素 我被困在数据提交点——当我使用多个表单时,我不能有多个提交按钮——只有一个。所以很明显,所有的数据都没有被捕获——只是包含子表单的表单的数据 有什么想法吗?我过去使用过Zend_Form,但从来没有这样过。您应该构建一个Zend_Form对象。如果要将您的

我试图在Zend中创建一个基本表单,它是许多其他表单的一部分。 以下3个元素可以是子表单,也可以是作为较大表单一部分的小表单: -名字 -年龄 -地址

我只想在不同的地方重复使用同一个表单,有时会添加“shipping address”等元素 我被困在数据提交点——当我使用多个表单时,我不能有多个提交按钮——只有一个。所以很明显,所有的数据都没有被捕获——只是包含子表单的表单的数据


有什么想法吗?我过去使用过Zend_Form,但从来没有这样过。

您应该构建一个Zend_Form对象。如果要将您的
姓名
年龄
地址
附加到表单中,并使其看起来正常,请执行以下操作:

$display_form = new DisplayForm();
$naa_form = new NameAgeAddressForm();
$display_form->addElements( $naa_form->getElements() );
$display_form = new DisplayForm();
$display_form->addSubForm( new NameAgeAddressForm() );
如果您希望它们看起来像子表单(即,有点像分组在一个子单元中),请执行以下操作:

$display_form = new DisplayForm();
$naa_form = new NameAgeAddressForm();
$display_form->addElements( $naa_form->getElements() );
$display_form = new DisplayForm();
$display_form->addSubForm( new NameAgeAddressForm() );

像这样设置可重用的Name/Age/Address表单(很可能是在扩展的init()方法中,这样您就不会在操作中看到大部分代码)

由于NAA表单不需要任何其他装饰器,因此可以将FormElements设置为唯一的装饰器,并从NAA表单中删除submit按钮

$littleForm->setDecorators(array('FormElements'));
$littleForm->removeElement('submit');
像这样设置显示/主窗体,并设置NAA窗体作为子窗体添加时的顺序,使其显示在主窗体的元素上方

$bigForm = new Zend_Form();
$bigForm->addElement(new Zend_Form_Element_Text('shippingAddress'));
$bigForm->addElement(new Zend_Form_Element_Submit('submit'));
$bigForm->addSubForm($littleForm, 'littleForm', 1);

$this->view->form = $bigForm;
在视图脚本中显示表单

echo $this->form;
这就是使用装饰器的方式。就我个人而言,我通过一个部分脚本来欺骗和显示我的表单,并且只使用decorator来呈现输入元素。也许你也会想要标签之类的东西