如何检查表格是否有错误?

时间:2016-01-23 17:11:26

标签: forms error-handling symfony

除了直接附加到表单字段的表单字段特定错误消息之外,我还希望在表单上方显示表单包含错误的消息。

如果表单有错误,如何签入Symfony3 twig模板?有used to be something like this in Symfony2

{% if form.get('errors') is not empty %}
    <div class="error">Your form has errors. Please check fields below.</div>
{% endif %}

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

2 个答案:

答案 0 :(得分:14)

使用form.vars.errors

{% if form.vars.errors is not empty %}
    {# ... #}
{% endif %}

注意!请注意,如果您的根表单有错误(或者子表单有错误并允许将错误冒泡到根表单),这只会评估为true。如果表单的常规子元素有错误,则不会评估为空!

所以valid变量可能更合适:

{% if not form.vars.valid %}
    {# ... errors ! #}
{% endif %}

答案 1 :(得分:-1)

使用symfony 3.4时,除了error_bubbling = truecompound = false之外不可能通过form.vars.errors这是不可能的。

你可以使用这样的脏代码:

{% 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构建登录表单,请在控制器中使用如下代码:

//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 %}