有没有办法在Zend Framework2中使用zend子窗体。当我在互联网上搜索时,我发现了许多示例,展示了如何使用zend子窗体,但使用Zend Framework1。
如果有人有一个链接/示例,可以通过一个基本示例,那就太好了。
任何信息不胜感激。
因为 Zend\Form 是树结构,所以您可以使用表单名称在表单中添加另一个表单。比如这样:
$form = new ZendFormForm();
$form->add(array(
'name' => 'username',
'type' => 'ZendFormElementText',
));
$subForm = new ZendFormForm();
$subForm->setName('subform');
$subForm->add(array(
'name' => 'email',
'type' => 'ZendFormElementText',
));
$form->add($subForm);
$form->prepare();
$helper = new ZendFormViewHelperFormText();
echo $helper($form->get('username')); //<input type="text" name="username" value="">
echo $helper($form->get('subform')->get('email')); //<input type="text" name="subform[email]" value="">
请注意,"子表单"输入名称将自动添加表单名称作为前缀。
使用它几个小时了,在我的理解中,zf1 子窗体功能是通过使用嵌套字段集在 zf2 中解决的。
ZendFormFieldset
也是ZendFormForm
的父类。
前面的答案对我来说似乎是正确的,但是如果您更喜欢将表单和子表单保留在单独的类中,请阅读以下内容:
http://zf2.readthedocs.org/en/latest/modules/zend.form.collections.html
如果您现在不感兴趣,请忽略实体和水合的内容,并查看CreateProduct
类,它是一个使用 FieldSet ProductFieldset
作为子窗体的表单。在呈现时,子窗体字段的名称如下
<input ...name="product[el1]" ... >
(其中product
是子窗体的名称)。$form->getData() 将返回
array('product'=>array(...))
注意:在渲染之前需要调用$form->prepare()
;,否则嵌套将不会被处理。