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