在 FOS Userbundle 中添加 class 用于密码输入

Add class for password input in FOS Userbundle

我想覆盖 FOS Userbundle 的默认注册表并添加自定义 class 到密码输入。所以我将 register.html.twig 和 register_content.html.twig 复制到适当的目录并编辑 register_content.html:

{% trans_default_domain 'FOSUserBundle' %}

<form action="{{ path('fos_user_registration_register') }}" {{ form_enctype(form) }} method="POST" class="fos_user_registration_register">
    {{ form_errors(form) }}

    {{ form_row(form.email, {'attr': {'class': 'input-block-level'}}) }}
    {{ form_row(form.username, {'attr': {'class': 'input-block-level'}}) }}
    {{ form_row(form.plainPassword, {'attr': {'class': 'input-block-level'}}) }}

    {#{{ form_row(form.submit, { 'label': 'Submit me' }) }}#}
    {{ form_end(form) }}
    <div>
        <input type="submit" value="{{ 'registration.submit'|trans }}" />
    </div>

{'attr': {'class': 'input-block-level'}} -> 它适用于除 plainPassword 之外的每个输入。我猜是因为它重复了或类似的东西。在使用 plainPassword 删除 form_row 并清除缓存后,它仍然显示更多内容,所以它似乎来自另一个文件。

它不是来自另一个文件,当您调用 formend 时,它将呈现您尚未呈现的所有字段。 要将 class 添加到您的 plainPassword 字段,您应该对它的每个元素执行此操作,因为普通密码是一个包含两个字段(密码字段和确认密码字段)的数组。 为此,您需要执行以下操作:

{{ form_widget(form.plainPassword.first, { 'attr': {'class': 'myclass'} }) }}
{{ form_widget(form.plainPassword.second, { 'attr': {'class': 'myclass'} }) }}