1

假设我们有一个 Symfony2 表单,其中包含 3 个复选框(A、B、C),我们希望用户至少勾选一个复选框以验证表单,所以任何组合([A]、[B]、[C] , [A,B], [A,C], [B,C] ,[A,B,C]) 将返回 true,并且没有选择 [] 返回 false。

在 Doctrine 对象上使用 Symfony 验证器来实现这一目标的正确方法是什么?

编辑
每个复选框都使用 Doctrine 映射到数据库中它自己的列@ORM\Column(type="boolean")

4

3 回答 3

3

如果您正确使用选项列表的选择字段类型,则可以使用ChoiceValidator

@Assert\Choice(min=1, minMessage = "You must choose at least one option.")

文档

如果 multiple 选项为真,那么您可以使用 min 选项强制选择至少 XX 个值。例如,如果 min 为 3,但输入数组仅包含 2 个有效项,则验证将失败。

于 2012-10-22T22:34:09.840 回答
1

问题解决了。

基于Symfony2 类约束验证器文档和关于将验证子路径设置为 UPGRADE-2.1.md 的更改的添加信息

在我的实体类中,我添加了:

class Message
{

  // ...

  // check if user selected at least one network to publish the message
  public function isNetworkSelected(ExecutionContext $context)
  {
    if (!$this->network_twitter && !$this->network_facebook && !$this->network_googleplus)
    {
      $context->addViolationAtSubPath('network_facebook', 'Please select at least one network', array(), null);
    }
  }

  // ...

}

validation.yml

MY\MessageBundle\Entity\Message
    constraints:
        - Callback:
            methods:   [isNetworkSelected]
于 2012-10-22T23:45:55.170 回答
0

你有按钮控制吗?如果是,则在单击事件上,检查是否有选择,如果是,则返回 true,否则返回 false。

于 2012-10-22T21:11:55.587 回答