2017-03-31 289 views
2

我有一個實體領域如下領域有「必需的」屬性:只有驗證組「NotBlank」的約束也當不使用

/** 
* @ORM\Column(nullable=true) 
* @Assert\NotBlank(groups={"myGroup"}) 
*/ 
protected $field; 

然後我打電話的實體形式,無任何確認團組(我configureOptions功能套data_class)。但該領域目前正在與HTML中required="required"屬性創建:

<input id="entity_field" name="entity[field]" required="required" type="text"> 

但是,如果我擺弄HTML,並採取了required="required",按預期在後端驗證工作(即NotBlank不適用對於這種形式)。

回答

1

註釋@Assert\NotBlank(groups={"myGroup"})是相關的服務器端,輸入屬性required="required"在窗體的建設被定義。 如果不需要這個字段,你應該在你的窗體中定義所需的選項設置爲false,看看文檔herehere

所需的選項

最常用的選項是必需的選項,可以應用於任何領域。默認情況下,所需的選項設置爲true,這意味着如果該字段留空,HTML5就緒的瀏覽器將應用客戶端驗證。如果你不希望這種行爲,或者禁用HTML5驗證或設置自己場上所需要的選項設置爲false:

還要注意的是所需要的選項設置爲true不會導致服務器端驗證得到應用。換句話說,如果用戶對現場提交一個空值(與舊的瀏覽器或Web服務等),將除非你使用的Symfony的NotBlank或NOTNULL驗證約束接受爲有效值。

換句話說,所需要的選項是「好」,但應始終使用真正的服務器端驗證。

+0

但是,如果我走了'@assert \ NotBlank'出去,'required'屬性消失。換句話說,框架中的某些內容讀取'NotBlank'並在表單中打擊一個'required =「required」'。它不應該是聰明的,只有當我在正確的驗證組中時纔讀取'NotBlank'?這是一個錯誤嗎? – Heitor

+0

@Heitor:在我的知識有symfony的 – Shady

+0

服務器端驗證和客戶端驗證沒有關係,服務器端和客戶端可能separatedly驗證,但是當你設置一定的「@assert」的限制,他們在兩個工作。嘗試在字段中設置'NotBlank',您將在HTML中自動獲得'required =「required」'。嘗試設置'Length'約束,您將得到'maxlength =「X」'。 當然,我假設Symfony標準版默認行爲。 – Heitor