假设我们有一个包含3个复选框(A,B,C)的Symfony2表单,我们希望用户勾选至少一个复选框以验证表单,因此任何组合([A],[B], [C],[A,B],[A,C],[B,C],[A,B,C])将返回true,并且selection []不返回false。
使用Doctrine对象上的Symfony验证器实现此目的的正确方法是什么?
修改:
每个复选框都使用Doctrine @ORM\Column(type="boolean")
答案 0 :(得分:2)
如果您正确使用选项列表的选择字段类型,则可以使用ChoiceValidator
:
@Assert\Choice(min=1, minMessage = "You must choose at least one option.")
来自docs:
如果multiple选项为true,则可以使用min选项强制选择至少XX个值。例如,如果min为3,但输入数组仅包含2个有效项,则验证将失败。
答案 1 :(得分:1)
问题解决了。
基于Symfony2 Class Constraint Validator documentation和Added info on changes to setting validation subpath to 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]
答案 2 :(得分:0)
你有按钮控制吗?如果是这样,在click事件上,检查是否有选择,如果是,返回true,否则返回false。