2014-03-25 57 views
1

我使用ZF2 + DoctrineORMModule +布爾字段

/** 
* @ORM\Column(type="boolean", nullable=false, name="is_public") 
* @Annotation\Required(false) 
* @Annotation\AllowEmpty() 
* @Annotation\Attributes({"placeholder":"Is Public"}) 
* @Annotation\Filter({"name":"boolean"}) 
* @Annotation\Options({"label":"Is Public"}) 
*/ 
private $isPublic; 

這種形式的使用原則註釋建設者和學說實體水化內置設置,通過註釋的形式。該實體然後綁定到這個表單。傳遞布爾字段時有一個問題,因爲任何值都被視爲false,除1之外,傳遞0會導致錯誤消息「不能爲空」。

有人可以請告訴我如何正確使用布爾字段使用此方法?理想情況下,我希望能夠在驗證字段之前使用過濾器?不僅如此,驗證卻忽略了AllowEmpty()和Required(false)字段。

親切的問候,

ISE

回答

0

你說的是發生似乎是正確的。表單上的複選框在未選中時不會提交任何內容,但水合物顯然需要能夠知道用戶何時打算清除該值(標記爲false)。

很肯定hydator應該與空字符串一起工作也是錯誤的。 Required和AllowEmpty並沒有真正意義上的布爾,特別是在你的情況下,因爲你也把nullable = false

+0

嗨,是的,輸入是通過休息JSON來,並在後數據中明確可用。這個字段不是複選框,我在Required和AllowEmpty中加入了希望繞過驗證器。基本上我無法將其設置爲false並通過驗證程序。我必須設置nullable = true並將db中除1以外的任何值視爲false。如果我將該類型設置爲複選框,請啓動它的工作? – ise

0

這樣我解決了它$ form-> getInputFilter() - > get('isPublic') - > setContinueIfEmpty(真);就在$ form-> isValid()前