yce*_*uto 6 php symfony symfony2-forms symfony-validator
我有一个包含许多字段和验证组的表单,这些字段也包含一些视图数据转换器.
我需要部分抑制验证表单(基于提交的数据的组):
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');
},
));
}
Run Code Online (Sandbox Code Playgroud)
当您这样做时,表单仍将运行基本完整性检查(禁用验证)和来自变换器的验证错误,它们将被抛出(创建变换器).
使用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
// ...
}
Run Code Online (Sandbox Code Playgroud)
它不是我的解决方案,因为不小心禁用了一些不仅仅是表单验证.
问题是:如何"动态"禁用一个变压器验证错误?
例:
我有一个形式字段RepeatedType属于person验证组和包含视图变压器(RepeatedType),该变压器抛出异常时,数组中的值它们是不相同的(ValueToDuplicatesTransformer).
因此,即使在验证组中company,表单也会显示属于RepeatedType来自变换器的字段的错误.
这里的问题是:如何ValueToDuplicatesTransformer在验证组没有时禁用错误person?
因为buildForm缺少与添加字段相关的代码,我假设:
data_class,而是在控制器中设置值repeated类型有required => true一个选项,用于验证密码$data传递给表单生成器的 包含该字段的值repeated。问题基本上是触发了验证。如果有任何数据,那么该类型将始终执行基本验证(重复字段应具有相同的值两次)。
解决这个问题的方法是$data首先不要将值传递给,并确保required => false重复字段。正如您已经解释的那样,您的表单只会在那之后进行组验证。
也许最强大的解决方案甚至是不同的,最好制作两个FormTypes而不是使用groups. 这将消除您在问题中描述的大部分复杂性。
| 归档时间: |
|
| 查看次数: |
752 次 |
| 最近记录: |