2014-03-25 41 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()前