【发布时间】:2012-10-22 07:40:12
【问题描述】:
我需要在表单上方显示所有错误,并为每个字段显示单独的错误。我该怎么做?
【问题讨论】:
标签: forms symfony error-handling
我需要在表单上方显示所有错误,并为每个字段显示单独的错误。我该怎么做?
【问题讨论】:
标签: forms symfony error-handling
您需要更具体,但希望以下内容可以帮助您。
假设您有一个名为 form 的变量。
{{ form_errors(form) }} 显示并非特定于一个字段的全局错误
{{ form_errors(form.email) }} 显示特定于字段的错误
{{ form_row(form.email) }} 为字段显示 form_widget form_label 和 form_errors
http://symfony.com/doc/2.0/cookbook/form/form_customization.html
编辑:
因此,如果您希望将全局错误和字段错误显示在同一位置,您可以这样做:
{{ form_errors(form) }}
{{ form_errors(form.field1) }}
{{ form_errors(form.field2) }}
...
【讨论】:
{% spaceless %}
{% if not form.vars.valid %}
<div class="alert alert-error">
{{ form_errors(form) }}
{% for children in form.children %}
{% if not children.vars.valid %}
{{ form_errors(children) }}
{# or with field label
<ul>
{% for error in children.vars.errors %}
<li><b>{{ children.vars.label }}</b>: {{ error.message }}</li>
{% endfor %}
</ul>
#}
{% endif %}
{% endfor %}
</div>
{% endif %}
{% endspaceless %}
在 sf 2.3 中为我工作
【讨论】:
在 Symfony 3.2 中,要获取模板中的所有表单错误,您可以使用 form.vars.errors.form.getErrors(true) 使用有点 hacky 但简单且有效的解决方案:
<ul>
{% for error in formView.vars.errors.form.getErrors(true) %}
<li>{{ error.message }}</li>
{% endfor %}
</ul>
诀窍在于:
formView.vars.errors.form),form.getErrors(true) 为您提供了一个遍历所有表单错误的递归迭代器。【讨论】:
我在我的包中覆盖了 form_div_layout.html.twig:
{% block form_errors %}
{% spaceless %}
{% set a = false %}
{% for child in form.children %}
{% if child.get("errors") %}
{% set a = 'true' %}
{% endif %}
{% endfor %}
{% if a == true %}
<div class="alert">
{% for children in form.children %}
{{ form_errors(children) }}
{% endfor %}
</div>
{% endif %}
{% if errors|length > 0 %}
<ul>
{% for error in errors %}
{{
error.messagePluralization is null
? error.messageTemplate|trans(error.messageParameters, 'validators')
: error.messageTemplate|transchoice(error.messagePluralization, error.messageParameters, 'validators')
}}
{% endfor %}
</ul>
{% endif %}
{% endspaceless %}
{% endblock form_errors %}
现在如果写form_errors(form),它会在表单中显示所有错误,并且每个字段上的错误也会指示。
【讨论】:
vars.errors 或直接转储表单字段以查看属性。
您的表单和字段都有单独的错误字段开始。您能否更具体地说明您要做什么以及您的问题出在哪里?
【讨论】:
我修改了@korvinko 的脚本,这适用于 Symfony 2.6.11 `
{% block form_errors %}
{% spaceless %}
<ul>
{% for children in form.children %}
{% if not children.vars.valid %}
{% for error in children.vars.errors %}
<li>{{ children.vars.label ~ ' ' ~
error.messagePluralization is null
? error.messageTemplate|trans(error.messageParameters, 'validators')
: error.messageTemplate|transchoice(error.messagePluralization, error.messageParameters, 'validators')
}}</li>
{% endfor %}
{% endif %}
{% endfor %}
</ul>
{% if errors|length > 0 %}
<ul>
{% for error in errors %}
<li>{{
error.messagePluralization is null
? error.messageTemplate|trans(error.messageParameters, 'validators')
: error.messageTemplate|transchoice(error.messagePluralization, error.messageParameters, 'validators')
}}</li>
{% endfor %}
</ul>
{% endif %}
{% endspaceless %}
{% endblock form_errors %}
`
【讨论】:
{% if children.vars.errors|length > 0 %}替换{% if not children.vars.valid %}