有没有办法在Zend Framework2中使用zend子表单。当我在互联网上进行搜索时,我已经找到了许多示例,展示了如何使用zend子表但使用Zend Framework1。
如果某人有链接/示例,可以通过基本示例,那就太棒了。
感谢任何信息。
答案 0 :(得分:5)
因为Zend \ Form是树结构,所以您可以使用表单名称在表单中添加另一个表单。像这样:
$form = new \Zend\Form\Form();
$form->add(array(
'name' => 'username',
'type' => 'Zend\Form\Element\Text',
));
$subForm = new \Zend\Form\Form();
$subForm->setName('subform');
$subForm->add(array(
'name' => 'email',
'type' => 'Zend\Form\Element\Text',
));
$form->add($subForm);
$form->prepare();
$helper = new Zend\Form\View\Helper\FormText();
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="">
请注意,“子表单”输入名称将添加表单名称作为前缀自动。
答案 1 :(得分:0)
我已经使用了几个小时,根据我的理解,zf1子表单的功能通过使用嵌套的字段集在zf2中解决。
\Zend\Form\Fieldset
也是\Zend\Form\Form
的父类。
之前的回答对我来说似乎是正确的,但如果您希望将表单和子表单保留在不同的类中,请阅读:
http://zf2.readthedocs.org/en/latest/modules/zend.form.collections.html
如果您现在不感兴趣,请忽略实体和水合物,并查看CreateProduct
类,它是一个使用FieldSet ProductFieldset
作为子表单的表单。在渲染时,子表单字段将命名为
<input ...name="product[el1]" ... >
(其中product
是子表单的名称)。
并且$ form-&gt; getData()将返回
array('product'=>array(...))
注意:您需要致电$form->prepare()
;在渲染之前,或者不会处理嵌套。