我正在使用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-group
div。
视图文件在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" }
答案 0 :(得分: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>
答案 1 :(得分:1)
当前Symfony 2.5 中的验证组存在错误,这让我发疯。见this question。您可以通过在config.yml
中强制执行先前的验证API来解决此问题:
framework:
validation:
enable_annotations: true
api: 2.4 # default is auto which sets broken API 2.5
为了拯救我的理智而对@gremo的所有赞誉。