除了直接附加到表单字段的表单字段特定错误消息之外,我还希望在表单上方显示表单包含错误的消息。
如果表单有错误,如何签入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
不起作用。)
答案 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 = true
和compound = 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 %}