Symfony и FOSUserBundle. Настройка ошибок проверки в шаблоне регистрации


Я пытался решить свою проблему: я не могу найти, где определены ошибки проверки register_content.html.twig.

Мне нужно знать, как показать эти ошибки так, как мне хотелось бы. В настоящее время мой реестр выглядит следующим образом:

enter image description here

Как вы можете видеть, существует уродливая ошибка проверки. Я хочу изменить теги

<div>
 <ul><li> Las dos contraseñas no coinciden. </li></ul> 
</div>

Предопределено где-то другим.

Я переопределил представление register_content.html.twig и могу показать, что ошибки проверки, но не настраивать его.

<div>
    {{ form_errors(form.email) }}
    {{ form_errors(form.username) }}
    {{ form_errors(form.plainPassword.first) }}
    {{ form_errors(form.plainPassword.second) }}
</div>

Знаете ли вы, как я могу настроить HTML-структуру ошибок проверки?

Например в login_content.html.twig ошибки проверки отображаются следующим образом:

enter image description here

Это возможно, потому что в login_content.html.twig определены ошибки проверки:

{% if error %}
    <div>{{ error.messageKey|trans(error.messageData, 'security') }}</div>
{% endif %}
Author: Mich, 2018-01-16

3 answers

Вам придется переопределить блок ошибок формы symfony по умолчанию. Вы можете узнать, как это сделать, в документации symfony

Вы сможете задать эту тему формы глобально или для каждого представления, как показано в документации

Так, например, если вы хотите отобразить ошибки внутри div с классом alert alert-danger, вы должны создать файл views/Form/form_errors.html.twig

{% form_theme form _self %}

{# form_errors.html.twig #}
{% block form_errors %}
    {% spaceless %}
        {% if errors|length > 0 %}
        <div class='alert alert-danger'>
            {% for error in errors %}
                <div>{{ error.message }}</div>
            {% endfor %}
        </div>
        {% endif %}
    {% endspaceless %}
{% endblock form_errors %}

И чтобы использовать эту пользовательскую тему только в регистрационной форме, вы должны позвонить в верхней части вашего переопределить файл register_content.html.twig

{% form_theme form 'Form/form_errors.html.twig' %}
 1
Author: knetsi, 2018-01-16 10:54:39

Я нашел решение. Я изменил переменную {{ form_error }} в Twig для form.field.vars.errors.

Пример, если вы хотите настроить ошибки проверки электронной почты:

<div>
    {{ form_errors(form.email) }}
</div>

Измените его на:

{% for errorItem in form.email.vars.errors %}
    <div>{{ errorItem.message }}</div>
{% endfor %}

Вы можете использовать тег div или любой другой тег, который вы хотите.

 1
Author: Mich, 2018-01-16 11:19:35

Вы можете использовать перевод . В файле parameters.ini установите языковой стандарт на свой язык и создайте файл сообщений . Затем в шаблоне ветки используйте:

    {% if error %}
        <div class="error">{{ error.message|trans({},'messages') }}</div>
    {% endif %}

Другим решением было бы:

{{ error.message | replace({"Bad credentials." : "Invalid username or password."}) }}
 0
Author: Violence, 2018-01-16 10:37:42