douyi7283 2019-04-27 16:41
浏览 50

表格不应包含额外的字段Symfony 4

I am trying to understand how Symfony works, so I tried to create two forms on the same page: one form for the firstname and the other for the email (I want two different forms so two different submit buttons).

I have the error This form should not contain extra fields.with Symfony 4 after I submit the form. The invalid value is the email.The violation message says "{{ extra_fields }}" => ""email""

I read in the Symfony documentation that I have to enable the option allow_extra_fields.

So this is what I tried :

$emailForm = $this->createFormBuilder(['allow_extra_fields' => true])
                          ->add('email'  )
                          ->add('Submit',SubmitType::class)
                          ->getForm();

but it didn't work. How can I remove the error message ? There are a few previous posts about the error but the version 4 of Symfony seems to work differently.

This is a bit more of code :

       $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);

I think the problem comes from the fact that I am handling two times, but I'm not sure at all ...

  • 写回答

1条回答 默认 最新

  • duandaishi9268 2019-04-27 20:41
    关注

    My advice would be to actually use form classes. They are not hard to do, and they work very nicely overall. For example if you create a form type called UserType, the form fields will all be named like user[firstname] and so on. the handleRequest will also automatically pick them up and not stumble over the other forms potentially posted data. Then instead of creating a form builder in your controller, you call

    $userForm = $this->createForm(UserType::class);
    $userForm->handleRequest($request); // as before.
    

    after that the if($userForm->isSubmitted() && $userForm->isValid()) check is very much enough to find out, which form was submitted.

    (also, if you didn't know: you can only submit one form at a time anyway ;o)

    However, I hope you're not doing too much custom form rendering. If you still would want to render your forms manually {{ userForm.firstname.vars.name }} should give you the form fields name (or maybe ...vars.id, i never can remember)

    评论

报告相同问题?

悬赏问题

  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值