2013-02-10 75 views
1

只显示第一条错误消息我有一个字段集的验证规则:Symfony2的表单验证 - 如何每场

/** 
* @var integer 
* 
* @ORM\Column(name="options", type="integer") 
* @Assert\NotBlank() 
* @Assert\Min(limit = "1381", message = "Please provide number higher than 1381") 
* @Assert\Regex(pattern = "/^\d{4}$/" , message = "Four digits are expected") 
*/ 
private $options; 

,它似乎有时Symfony的是检查每个断言(什么是好的),并提供一切错误在看来(不期望什么)。在提交选项= 5的表单后,我收到了错误消息。

Options 
- Please provide number higher than 1381 
- Four digits are expected 

但是当我发送option = null时,只显示一条错误消息。

Options 
- This value should not be blank. 

是否有一个“开关”,导致只有一个错误消息在模板中呈现?我希望我的表单中每个字段只有一条错误消息。

======编辑======
Solution I like由伯恩哈德Schussek
帕特感谢您指出我有

+3

一个伟大的方式做到这一点是使用[证实测序] (http://stackoverflow.com/questions/11627337/symfony-2-gives-more-than-one-validation-error-message)由symfony形式大师@Bernhard推荐:) – Mick 2013-02-10 02:29:01

+0

这是我需要的技巧 - 请键入它作为答案让我投票。谢谢 – mrok 2013-02-10 22:34:51

+1

很高兴这有帮助,不要担心这个事件。这是@Bernhard的答案。也许你可以upvote他的答案和编辑你的问题,让人们可以有一个链接,伯纳德回答:) – Mick 2013-02-11 00:27:46

回答

2

一种选择是修改模板/块的形状误差块application wide (以便模板中的每个表单都可以获得所需的行为)。或者覆盖per template basis上的表格布局。

如果你去看看default form layout附带的Symfony的标准版,您可以看到line 273form_errors树枝block定义。

您可以覆盖在给定模板此块(根据文件),以只能随声附和从errors数组一个元素:

{# SomeTemplate:Default:index.html.twig #} 
{% extends '::base.html.twig' %} 

{% form_theme form _self %} 

{% block form_errors %} 
{% spaceless %} 
    {% if errors|length > 0 %} 
    {{ errors[0].message }} 
    {% endif %} 
{% endspaceless %} 
{% endblock form_errors %} 

{% block content %} 
    {# ... render the form #} 

    {{ form_rest(form) }} 
{% endblock %} 
+0

错误|长度将永远是1,如果错误可用或0,如果不是。所以,即使你有2个错误(2个字段有错误) - 你会得到字段{{id}}始终计数== 1. 我的建议是使用JS并隐藏多个错误 – nvvetal 2016-01-27 22:49:55