Форма не должна содержать лишних полей Symfony 4 - PullRequest
0 голосов
/ 27 апреля 2019

Я пытаюсь понять, как работает Symfony, поэтому я попытался создать две формы на одной странице: одну форму для имени и другую для электронного письма (мне нужны две разные формы, поэтому две разные кнопки отправки).

У меня ошибка This form should not contain extra fields. в Symfony 4 после отправки формы.Недопустимым значением является адрес электронной почты. Сообщение о нарушении гласит «{{ 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 голосов
/ 27 апреля 2019

Мой совет будет на самом деле использовать формы классов .Их не сложно сделать, и в целом они работают очень хорошо.Например, если вы создаете тип формы с именем UserType, все поля формы будут именоваться как user[firstname] и так далее.handleRequest также автоматически забирает их и не натыкается на другие формы, потенциально размещенные данные.Затем вместо того, чтобы создавать построитель форм в вашем контроллере, вы вызываете

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

, после чего проверки if($userForm->isSubmitted() && $userForm->isValid()) достаточно, чтобы узнать, какая форма была отправлена.

(также, если вы не знали: вы все равно можете отправлять только одну форму одновременно;Если вы все еще хотите визуализировать ваши формы вручную, {{ userForm.firstname.vars.name }} должен дать вам имя поля формы (или, может быть, ...vars.id, я никогда не смогу запомнить)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...