如何在Zend Framework 2中使用子表单

时间:2012-12-04 15:25:33

标签: zend-framework2 subforms

有没有办法在Zend Framework2中使用zend子表单。当我在互联网上进行搜索时,我已经找到了许多示例,展示了如何使用zend子表但使用Zend Framework1。

如果某人有链接/示例,可以通过基本示例,那就太棒了。

感谢任何信息。

2 个答案:

答案 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();在渲染之前,或者不会处理嵌套。