Symfony 和 FOSUserBundle。自定义注册模板上的验证错误

Symfony & FOSUserBundle. Customize validation errors on register template

我试图解决我的问题:我无法找到 register_content.html.twig 的验证错误的定义位置。

我需要知道如何显示我想要的错误。现在我的注册是这样的:

如您所见,存在一个丑陋的验证错误。我想更改标签

<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 验证错误的结构吗?

例如 in login_content.html.twig 验证错误显示如下:

这是可能的,因为在 login_content.html.twig 中定义了验证错误:

{% if error %}
    <div>{{ error.messageKey|trans(error.messageData, 'security') }}</div>
{% endif %}

您必须覆盖默认的 symfony 表单错误块。 您可以在 symfony documentation

中找到如何操作

您将能够全局或按视图设置此表单主题,如 documentation

中所示

因此,例如,如果您想在带有 class alert alert-danger 的 div 中显示错误,您将创建一个文件 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' %}

您可以使用 translation. In parameters.ini set locale to your language and create message file。然后在树枝模板中使用:

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

另一个解决方案是:

{{ error.message | replace({"Bad credentials." : "Invalid username or password."}) }}

我找到了解决办法。我已经将 Twig 中的 {{ form_error }} 变量更改为 form.field.vars.errors.

一个例子,如果你想自定义你的电子邮件验证错误:

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

更改为:

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

您可以使用 div 标签或任何您想要的标签。