【问题标题】:ZF2 + DoctrineORMModule + Boolean fieldZF2 + DoctrineORMModule + 布尔字段
【发布时间】:2014-03-25 17:00:03
【问题描述】:

我正在使用注释设置表单

/**
 * @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) 字段。

亲切的问候,

【问题讨论】:

    标签: doctrine-orm zend-framework2


    【解决方案1】:

    您所说的正在发生的事情似乎是正确的。表单上的复选框未选中时不提交任何内容,但 hydrator 显然需要能够知道用户何时打算清除该值(标记为 false)。

    很确定 hydrator 也应该使用空字符串作为 false 。 Required 和 AllowEmpty 对布尔值没有意义,尤其是在您的情况下,因为您还设置了 nullable=false

    【讨论】:

    • 嗨,是的,输入是通过 rest json 来的,并且肯定在 post 数据中可用。这个字段不是一个复选框,我在Required和AllowEmpty中添加了希望绕过验证器。基本上我无法将其设置为 false 并通过验证器。我必须设置 nullable=true 并将数据库中除 1 以外的任何值视为 false。如果我将类型设置为复选框,那么它开始工作了吗?
    【解决方案2】:

    这样我解决了 $form->getInputFilter()->get('isPublic')->setContinueIfEmpty(true);就在 $form->isValid()

    之前

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-23
      • 1970-01-01
      • 1970-01-01
      • 2015-01-24
      • 2010-09-07
      • 1970-01-01
      相关资源
      最近更新 更多