这几天做symfony,遇到一个情形:
有两行checkbox,Row1: Checkbox A, Row2: Checkbox X, Y, Z
当A选中的时候,X,Y,Z必须至少有一个被选中。当A没有选中的时候,X,Y,Z disable。
Disable用jquery很容易实现,做validation却花了挺久,具体为:
在Row2的Form里面加上constraints
'constraints' => array(
new AssertCount(
array(
'min' => 1,
'minMessage' => 'Please select at least one'
)),
)
这里min说明至少要选中一个,minMessage提供错误提示。但这里问题是当CheckboxA没有选中的时候一直提示Row2不能为空。
为了增加判断何时做这个validation,增加了一个constant VALIDATION_GROUP并赋予Row2。
'groups' => static::VALIDATION_GROUP,
同时,在setDefaultOptions里面加入这个group
'validation_groups' => function (FormInterface $form) {
if ($form->get('checkboxA')->getData() == false) {
return false;
} else return static::VALIDATION_GROUP;
},
当checkboxA没有选中的时候不做任何validation,当选中的时候增加至少选择一项的限制。
大功告成!