Forms 如何检查窗体在细枝中是否有错误?

Forms 如何检查窗体在细枝中是否有错误?,forms,error-handling,symfony,Forms,Error Handling,Symfony,除了直接附加到表单字段的表单字段特定错误消息之外,我想在表单上方显示一条消息,说明表单包含错误 如果表单有错误,如何签入Symfony3细枝模板?在那里: {%if form.get('errors')不是空的%} 您的表单有错误。请检查下面的字段。 {%endif%} 但这在Symfony3中不起作用。有什么想法吗?(form.vars.errors不起作用。)使用form.vars.errors: {%if form.vars.errors不为空%} {# ... #} {%endif%}

除了直接附加到表单字段的表单字段特定错误消息之外,我想在表单上方显示一条消息,说明表单包含错误

如果表单有错误,如何签入Symfony3细枝模板?在那里:

{%if form.get('errors')不是空的%}
您的表单有错误。请检查下面的字段。
{%endif%}

但这在Symfony3中不起作用。有什么想法吗?(
form.vars.errors
不起作用。)

使用
form.vars.errors

{%if form.vars.errors不为空%}
{# ... #}
{%endif%}
注意请注意,如果根窗体有错误(或者如果子窗体有错误并允许将错误冒泡到根窗体),则此值仅计算为true。如果表单的常规子元素有错误,则不会计算为空

因此,
valid
变量可能更合适:

{%if not form.vars.valid%}
{#…错误!#}
{%endif%}

使用symfony 3.4时,无法再通过form.vars.errors执行此操作,除非您有
error\u bubbling=true
和form
component=false
,这是不可能的

您可以使用如下脏代码:

{% set errors = false %}
{% for child in form.children %}
        {% if child.vars.errors is defined and child.vars.errors|length %}
                {% set errors = true %}
        {% endif %}
{% endfor %}
{% if errors %}
        [...]
{% endif %}
如果您试图使用AuthenticationUtils构建登录表单,请在controller中使用如下代码:

//Get the login error if there is one
if ($error = $authenticationUtils->getLastAuthenticationError()) {
        //Add error message to mail field
        $form->get('mail')->addError(new FormError($error->getMessageKey()));
}

//Last username entered by the user
if ($lastUsername = $authenticationUtils->getLastUsername()) {
        $form->get('mail')->setData($lastUsername);
}

//Render view
return $this->render('@ExampleBundle/template.html.twig', array('form' => $form->createView(), 'error' => $error));
并在twig模板中使用如下简单代码:

{% if error %}
        [...]
{% endif %}

form.vars.errors不是空的
总是
false
,这不起作用。但是
不是form.vars.valid
有效。谢谢@GottliebNotschnabel如果答案对你有效,请将其标记为已接受,以便其他人可以轻松找到解决方案。是的,当然。但是imho
form.vars.error
总是空的。所以这不起作用,你能修改你的答案吗?我相应地编辑了你的答案,如
form.vars.error
总是空的,而
form.vars.error | length
总是
0
。不总是,如果你的根表单有错误(或者如果子表单有错误并且允许将错误冒泡到根表单),它不是空的。
{% if error %}
        [...]
{% endif %}