1

有没有办法在 Zend Framework2 中使用 zend 子表单。当我在互联网上进行搜索时,我发现了许多示例,这些示例展示了如何使用 Zend 子表单,但使用的是 Zend Framework1。

如果有人有一个可以通过基本示例的链接/示例,那就太好了。

任何信息表示赞赏。

4

2 回答 2

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="">

请注意,“子表单”输入名称将自动添加表单名称作为前缀。

于 2012-12-05T07:36:11.837 回答
0

我已经使用它几个小时了,据我了解,zf1 子表单功能在 zf2 中通过使用嵌套字段集来解决。

\Zend\Form\Fieldset也是 的父类\Zend\Form\Form

上一个答案对我来说似乎是正确的,但如果您更喜欢将表单和子表单保存在单独的类中,请阅读以下内容:

http://zf2.readthedocs.org/en/latest/modules/zend.form.collections.html

如果您暂时不感兴趣,请忽略实体和水合的东西,并查看CreateProduct类,它是使用 FieldSetProductFieldset作为子表单的表单。在渲染时,子表单字段将被命名为

<input ...name="product[el1]" ... >

product子表单的名称在哪里)。并且 $form->getData() 将返回

array('product'=>array(...))

注意:您需要调用$form->prepare(); 在渲染之前,否则不会处理嵌套。

于 2013-08-22T17:18:22.513 回答