2013-02-10 87 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