0

我正在使用 FOSUserBundle 来注册用户。不过,这些错误出现在一个奇怪的地方。

它们出现在密码字段行中,而不是用户名或电子邮件

表格错误

如您所见,错误显示在密码旁边,而不是用户名或电子邮件旁边。HTML 显示错误在密码行中,而不仅仅是在用户名行的底部。

为什么是这样?

我已经使用fields.html.twig并添加了这个;

{% block form_row %}
    {% spaceless %}
        <div class="form-group">           
            {{ form_errors(form) }}         
            {{ form_label(form) }}
            {{ form_widget(form) }}
        </div>
    {% endspaceless %}
{% endblock form_row %}

这可行,但错误都出现在密码form-groupdiv 中。

视图文件如下所示Resources/views/Registration/register_content.html.twig

<form role="form" action="{{ path('fos_user_registration_register') }}" {{ form_enctype(form) }} method="POST" class="form-horizontal fos_user_registration_register">
    {{ form_widget(form) }}

    <div class="form-group">
        <div class="col-sm-offset-2 col-sm-10">
            <input type="submit" class="btn btn-info" value="{{ 'registration.submit'|trans }}" />
        </div>
    </div>
</form>

如何将它们移动到各自的 div 或将它们移动到表单的开头?

我也有这个validation.yml 文件,可能值得注意

FOS\UserBundle\Model\User:
    constraints:
        - Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity: {fields: username, message: "This username is taken" }
        - Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity: {fields: email, message: "This email is taken" }
4

2 回答 2

1

{{ form_errors(form) }}呈现附加到表单的错误。并且显示在{{ form_errors(form) }}上次提到的地方,也就是里面password div

看起来您已将error_bubbling表单字段设置为 true。如果您希望在元素旁边显示错误,请不要使用error_bubbling.

此外,您可以在Resources/views/Registration/register_content.html.twig模板中单独呈现字段。我将删除fields.html.twig并更改Resources/views/Registration/register_content.html.twig为以下内容:

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

    {{ form_errors(form) }}

    <div class="form-group">
        {{ form_errors(form.email) }}
        {{ form_label(form.email) }}
        {{ form_widget(form.email) }}
    </div>

    <div class="form-group">
        {{ form_errors(form.username) }}
        {{ form_label(form.username) }}
        {{ form_widget(form.username) }}
    </div>

    <div class="form-group">
        {{ form_label(form.plainPassword.first) }}
        {{ form_widget(form.plainPassword.first) }}
        {{ form_errors(form.plainPassword.first) }}
    </div>

    <div class="form-group">
        {{ form_label(form.plainPassword.second) }}
        {{ form_widget(form.plainPassword.second) }}
        {{ form_errors(form.plainPassword.second) }}
    </div>

    <div class="form-group">
        <div class="col-sm-offset-2 col-sm-10">
            <input type="submit" class="btn btn-info" value="{{ 'registration.submit'|trans }}" />
        </div>
    </div>

    {{ form_rest(form) }}

</form>
于 2014-06-25T18:45:50.277 回答
1

当前 Symfony 2.5中的验证组存在一个错误,这让我抓狂。看到这个问题。您可以通过在以下代码中强制执行先前的验证 API 来解决此问题config.yml

framework:
    validation:
        enable_annotations: true
        api: 2.4 # default is auto which sets broken API 2.5

感谢@gremo 拯救我的理智。

于 2014-07-07T11:42:53.537 回答