Forms Symfony:表单不应包含一页上有两个表单的额外字段

Forms Symfony:表单不应包含一页上有两个表单的额外字段,forms,symfony,Forms,Symfony,我是Symfony 3的新手,我正在尝试构建一个页面,其中我有两个用于两个不同实体的表单。一个用于添加愿望,另一个用于添加评论。 当我提交一个表单时,第二个表单出现错误“此表单不应包含额外字段” 我尝试了$form->get('submit')->isClicked(),但没有成功 我还尝试了allow_extra_fields=>true,然后我收到了一个错误,它试图插入一个愿望,尽管我提交了一条评论。此外,在尝试执行查询之前,我使用form->isValid()检查表单是否有效 它怎么可能同

我是Symfony 3的新手,我正在尝试构建一个页面,其中我有两个用于两个不同实体的表单。一个用于添加愿望,另一个用于添加评论。 当我提交一个表单时,第二个表单出现错误“此表单不应包含额外字段”

我尝试了$form->get('submit')->isClicked(),但没有成功

我还尝试了allow_extra_fields=>true,然后我收到了一个错误,它试图插入一个愿望,尽管我提交了一条评论。此外,在尝试执行查询之前,我使用form->isValid()检查表单是否有效

它怎么可能同时提交这两份表格

这是我的控制器:


从常识的角度来看,这不应该发生。但是,如果查看生成的标记(提交前),您可能会看到表单名为
form
,字段名为
form[Comment]
form[Type]
等。请注意,两个表单的字段都有
form
前缀

命名冲突使
Symfony
认为您将提交这两个表单。有两种方法可以解决此问题:

1。完成后,将表单提交到其他URL并重定向到通用URL。

这涉及到向两个表单生成器添加一个
setAction
调用。在某些情况下,这可能正是您想要的,但如果您的通用代码(提交后的代码)依赖于许多以表单形式发布的内容,这就是痛苦。例如:

$formbuilder = $this->get('form.factory')
    ->createBuilder(FormType::class, $wishcom);

$formbuilder
    ->add('Type', ChoiceType::class, array(
        'choices'  => array(
            'Argument' => 'Argument',
            'Contre-argument' => 'Contre-argument',
            'Commentaire' => 'Commentaire')
        )
    )
    ->add('Comment', TextareaType::class)
    ->add('Commenter', SubmitType::class)
    ->setAction('/formcom-submit') // <-- THIS

$formcom=$formbuilder->getForm();
$formbuilder = $this->get('form.factory')
    ->createNamedBuilder('formcom', FormType::class, $wishcom);
以及:

另一件值得研究的事情是,您是否应该将这两个表单移动到单独的类中。在这种情况下,您将获得开箱即用的名称唯一性,您的代码肯定会感觉更干净。在任何情况下,如果您打算在另一个操作中重用此表单,我会说使用它


希望这有帮助……

非常感谢您的快速回答!我使用createNamedBuilder方法。由于我没有使用本页以外的表单,所以我没有考虑过将它们变成无类。但是谢谢你的提示!很高兴我能帮忙;)非常感谢你。我不知道为什么Symfonys的创建者会隐藏这个方法。。。我刚刚检查过:createBuilder->347k的结果(在symfony.com上有64个)createNamedBuilder->少于10k的结果(在symfony.com上有6个)
$formbuilder = $this->get('form.factory')
    ->createNamedBuilder('formcom', FormType::class, $wishcom);
$formbuilder = $this->get('form.factory')
    ->createNameBuilder('formsol', FormType::class, $wishsol);