表单不应包含多余的字段Symfony 4

时间:2019-04-27 16:41:16

标签: php symfony

我试图了解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);

我认为问题出在我要处理两次,但我不确定...

1 个答案:

答案 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,我永远记得)