Form_errors ничего не отображает

Мне сложно отображать ошибки проверки форм. Когда я неправильно заполняю форму, ничего не отображается.

Вот мой контроллер:

public function Register(Request $request){
    $user = new User();

    // Accounts must be enabled manually

    $authenticator = new GoogleAuthenticator();

    $user->setEnabled(false);
    $user->setAdmin(false);
    $user->setSecret($authenticator->createSecret());

    $form = $this->createFormBuilder($user)
        ->add('email', TextType::class)
        ->add('email', RepeatedType::class)
        ->add('password', PasswordType::class)
        ->add('password', RepeatedType::class)
        ->add('phone', TelType::class)
        ->add('secret', HiddenType::class)
        ->add('save', SubmitType::class, array('label' => 'Register'))
        ->getForm();

    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {
        // $form->getData() holds the submitted values
        // but, the original `$task` variable has also been updated
        $user = $form->getData();

        // ... perform some action, such as saving the task to the database
        // for example, if Task is a Doctrine entity, save it!
        // $entityManager = $this->getDoctrine()->getManager();
        // $entityManager->persist($task);
        // $entityManager->flush();

        return $this->redirectToRoute('register_success');
    }

    return $this->render('register.html.twig', array(
        'form' => $form->createView()
    ));
}

И мой шаблон

{{ form_start(form) }}
    {{ form_errors(form) }}
    <div>
        {{ form_errors(form.email) }}
        {{ form_label(form.email) }} : 
        {{ form_widget(form.email.first, { 'attr' : {'placeholder' : 'Email address'}})}}
        {{ form_widget(form.email.second, { 'attr' : {'placeholder' : 'Email address (again)'}})}}
    </div>

    <div>
        {{ form_errors(form.password) }}
        {{ form_label(form.password) }} : 
        {{ form_widget(form.password.first, { 'attr' : {'placeholder' : 'Password'}})}}
        {{ form_widget(form.password.second, { 'attr' : {'placeholder' : 'Password (again)'}})}}
    </div>

    <div>
        {{ form_errors(form.phone) }}
        {{ form_label(form.phone) }} : 
        {{ form_widget(form.phone, { 'attr' : {'placeholder' : 'International format (+33)'}}) }}
    </div>

    <div>
        {{ form_widget(form.save) }}
    </div>

{{ form_end(form) }}

Формы перезагружаются с предварительно заполненными данными, но ошибки не отображаются (только пустая строка в исходном коде)

Жду ваших подсказок Спасибо

Проверьте свой профилировщик (на вкладке формы), чтобы узнать, что происходит.

Aurelien 02.05.2018 21:44

Какую версию Symfony вы используете? Также существует вероятность, что $ form-> isSubmitted () по какой-то причине может вернуть false. Спасибо!

Azhar Khattak 02.05.2018 21:46

Профилировщик сообщает о 2 ошибках (поля адреса электронной почты и пароля не совпадают). Symfony 4, isSubmitted возвращает истину (пробовал с правильными фиктивными значениями, которые перенаправляют на успешный маршрут)

JeanneD4RK 02.05.2018 21:56

Вы проверили свою сущность?

Shaithya Kannan 03.05.2018 05:54

Зачем проверять мою сущность? Ошибки обнаруживаются, только не отображаются.

JeanneD4RK 03.05.2018 08:59
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
5
251
2

Ответы 2

Для их отображения необходимо настроить валидаторы (и, следовательно, сообщения об ошибках).

Спасибо за вашу помощь.

Во-первых, вам не нужно «повторять» ваши уже определенные как RepeatedType поля, адрес электронной почты и пароль.

Измените на:

$form = $this->createFormBuilder($user)
    ->add('email', RepeatedType::class, array(
         'type' => TextType::class,
         'invalid_message' => 'The email fields must match.',
         'options' => array('attr' => array('class' => 'email-field')),
         'required' => true,
         'first_options'  => array('label' => 'Email'),
         'second_options' => array('label' => 'Repeat Email'),
     ))
    ->add('password', RepeatedType::class, array(
         'type' => PasswordType::class,
         'invalid_message' => 'The password fields must match.',
         'options' => array('attr' => array('class' => 'password-field')),
         'required' => true,
         'first_options'  => array('label' => 'Password'),
         'second_options' => array('label' => 'Repeat Password'),
    ));

Чтобы отобразить ошибки, используйте:

{{ form_errors(form.email.first)}}
{{ form_errors(form.email.second)}}

{{ form_errors(form.password.first)}}
{{ form_errors(form.password.second)}}

Рекомендации

Полевая документация Symfony 4 RepeatedType

Другие вопросы по теме