假设我们有一个包含3个复选框(a,b,c)的Symfony2表单,我们希望用户至少勾选一个复选框以验证表单,因此任何组合(因此)[a],[b],[c],[a,b],[a,c],[b,c],[a,b,c])将返回true且无选择[]返回false。<<<<<<<<<<<</p>
使用教义对象上的Symfony验证器实现此目的的正确方法是什么?
编辑:
每个复选框都使用学说@ORMColumn(type="boolean")
如果您正确地使用了选项列表的选择字段类型,则可以使用ChoiceValidator
:
@AssertChoice(min=1, minMessage = "You must choose at least one option.")
来自文档:
如果多个选项为true,则可以使用最小选项强制选择要选择的XX数量的值。例如,如果min是3,但是输入数组仅包含2个有效的项目,则验证将失败。
解决问题。
基于Symfony2类约束验证器文档以及有关将验证subpath设置为升级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
中:
MYMessageBundleEntityMessage
constraints:
- Callback:
methods: [isNetworkSelected]
您有按钮控件吗?如果是这样,在单击事件中,请检查是否进行了选择,如果是这样,请返回true,否则返回false。