Symfony 3.4 - тема формы form_errors не отображается - PullRequest
0 голосов
/ 20 декабря 2018

РЕДАКТИРОВАТЬ: Выполнение некоторых копаний, и, похоже, моя проблема проистекает из того факта, что создаваемая мной форма строится на основе регистрационной формы FOSUserBundle.Почему это проблема?Потому что, хотя их RegistrationController генерирует событие REGISTRATION_FAILURE, если форма недействительна, это не похоже на то, что у события есть прослушиватель.Таким образом, недопустимое состояние на самом деле ничего не делает, если не обрабатывается системой вообще.Он даже не возвращает форму (с ошибками).

У меня есть относительно простая тема формы, которую я хочу использовать для отображения ошибок формы в блоке в верхней части формы:

{% form_theme form _self %}

{% block form_errors %}
    {% spaceless %}
        {% if errors|length > 0 %}
            <div class="errors pt-2 mb-2">
                <ul>
                    {% for error in errors %}
                        <li>{{ error.message }}</li>
                    {% endfor %}
                </ul>
            </div>
        {% endif %}
    {% endspaceless %}
{% endblock form_errors %}

Я ссылаюсь на него в шаблоне формы следующим образом:

{% form_theme form 'Form/errors.html.twig' %}

И затем я пытаюсь вызвать его с помощью простого:

{{ form_errors(form) }}

Но когда я намеренно предоставляюневерные данные на входах в мою форму и попробуйте отправить, нет ошибки div присутствует.Сбой отправки из-за наличия 6 ошибок проверки, но никаких ошибок не отображается / в источнике HTML.

Глядя на документацию , я думаю, что все делаю правильно, ноЯ явно что-то упускаю.

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

У вас есть две проблемы, и вы должны решить обе из них, чтобы проверка формы работала.

1-я проблема:

Первая проблема заключается в том, что слушатель не работает.Если вы намеренно делаете ошибки в данных формы, а проверка формы не запускается, то вы никогда не увидите шаблон form_errors.Вы должны просмотреть документацию для FOSUserBundle.Сначала проверьте, правильно ли вы включили / настроили validation.yml.Во-вторых, проверьте класс PHP, который генерирует форму.Убедитесь, что критерии проверки установлены правильно.Теперь самый надежный способ проверить, если форма выдает ошибки, это {{dump(form)}} в шаблоне Twig.Он покажет все данные для формы, включая ошибки.Продолжайте работать над этим, пока вам не удастся увидеть некоторые ошибки.В противном случае вы не сможете выполнить следующий шаг.

2-я проблема:

Вторая проблема заключается в том, что вы, вероятно, не указали правильный шаблон.Я не могу сосчитать, сколько раз у меня была такая же проблема.У вас может быть 3 или 4 шаблона, которые содержат код html / twig для <form>, но Symfony фактически использует 1 или 2 из них.Добавьте свой код к каждому из них и убедитесь, что ваш блок Twig не перекрывается каким-либо другим блоком формы.

Также имейте в виду, что вы должны очистить оба кеш приложения (php bin/console cache:clean -e prod) и кеш браузера после каждого изменения в шаблонах.Возможно, вы все сделали правильно, и чертов кеш показывает кешированные результаты. Последний совет : используйте инструменты разработчика браузера.Часто вы найдете много информации, и ошибки отображаются в консоли инструментов.

0 голосов
/ 23 декабря 2018

в чем ошибка формы?Для выдачи ошибки вы должны установить утверждения на вашей сущности.например:

class User extend baseUser
{
    /**
     * @Assert\NotBlank
     */
    public $name;
}

для получения дополнительной информации: https://symfony.com/doc/current/validation.html

...