如何根据提交的数据选择验证组
如果在验证组你需要一些高级的逻辑(例如根据提交的数据),你可以设置validation_groups
为数组:
1 2 3 4 5 6 7 8 9 10 11 12 |
use Symfony\Component\OptionsResolver\OptionsResolver;
// ...
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'validation_groups' => array(
'AppBundle\Entity\Client',
'determineValidationGroups',
),
));
} |
这将在表单提交后,执行验证之前,调用Client
类的静态方法determineValidationGroups()
。表单对象作为一个参数传入到该方法(下面例子)。你也可以通过一个Closure
来定义整个逻辑:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
use AppBundle\Entity\Client;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
// ...
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'validation_groups' => function (FormInterface $form) {
$data = $form->getData();
if (Client::TYPE_PERSON == $data->getType()) {
return array('person');
}
return array('company');
},
));
} |
使用validation_groups
配置去覆盖正在使用的默认验证组。如果你想要去验证实体的默认约束就必须调整选项如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
use AppBundle\Entity\Client;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
// ...
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'validation_groups' => function (FormInterface $form) {
$data = $form->getData();
if (Client::TYPE_PERSON == $data->getType()) {
return array('Default', 'person');
}
return array('Default', 'company');
},
));
} |
在验证组章节中你可以找到更多验证组和默认约束的细节。