我试图了解Symfony的工作原理,所以我尝试在同一页面上创建两种形式:一种形式用于名字,另一种形式用于电子邮件(我想要两种不同的形式,因此需要两种不同的提交按钮)。>
提交表格后,Symfony 4出现错误This form should not contain extra fields.
。无效值为电子邮件。违规消息显示为“ {{ extra_fields }}" => ""email"
”
我在Symfony文档中阅读到必须启用选项allow_extra_fields
。
这就是我尝试的:
$emailForm = $this->createFormBuilder(['allow_extra_fields' => true])
->add('email' )
->add('Submit',SubmitType::class)
->getForm();
但是没有用。如何删除错误消息?以前有几篇关于该错误的文章,但是Symfony的版本4似乎有不同的用法。
这是更多代码:
$userForm = $this->createFormBuilder($defaultData)
->add('firstname', TextType::class)
->add('email', EmailType::class)
->add('description', TextType::class)
->add('Submit', SubmitType::class)
->getForm();
$userForm->handleRequest($request);
$defaultData = ['pass' => '', 'conf_pass' => ''];
$passForm = $this->createFormBuilder($defaultData)
->add('pass', PasswordType::class, ['label' => 'Change password'])
->add('conf_pass', PasswordType::class, ['label' => 'Confirm password'])
->add('Submit', SubmitType::class)
->getForm();
$passForm->handleRequest($request);
我认为问题出在我要处理两次,但我不确定...
答案 0 :(得分:0)
我的建议是实际使用use form classes。他们并不难做,并且总体上他们工作得很好。例如,如果您创建一个名为UserType的表单类型,则所有表单字段都将被命名为user[firstname]
,依此类推。 handleRequest还将自动拾取它们,并且不会绊倒其他可能发布的数据的形式。然后,您调用
$userForm = $this->createForm(UserType::class);
$userForm->handleRequest($request); // as before.
之后,if($userForm->isSubmitted() && $userForm->isValid())
检查就足以找出提交了哪个表格。
(此外,如果您不知道:您一次只能提交一份表格; o)
但是,我希望您不要做太多的自定义表单渲染。如果您仍然想手动呈现表单,{{ userForm.firstname.vars.name }}
应该给您表单域名称(或者也许是...vars.id
,我永远记得)