我有一个包含许多字段和验证组的表单,这些字段也包含一些视图数据转换器。
我需要部分抑制验证表单(基于提交数据的组):
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');
},
));
}
当你这样做时,表单将执行基本的完整性检查(禁用验证)并且仍然抛出来自转换器的验证错误(创建转换器)。
使用该POST_SUBMIT
事件并防止ValidationListener被调用(抑制表单验证):
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\Form\FormEvent;
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) {
$event->stopPropagation();
}, 900); // Always set a higher priority than ValidationListener
// ...
}
这对我来说不是一个解决方案,因为它意外地禁用了不仅仅是表单验证的东西。
问题是:如何“动态”禁用一个变压器验证错误?
例子:
我有一个RepeatedType
属于person
验证组的表单字段并包含一个视图转换器( RepeatedType ),当数组中的值不同( ValueToDuplicatesTransformer )时,此转换器会引发异常。
因此,即使验证组是company
,表单也会显示错误属于RepeatedType
来自转换器的字段。
这里的问题是:当验证组不是时如何禁用错误?ValueToDuplicatesTransformer
person