Symfony 5 中子表单的验证组

Validation Groups for Subforms in Symfony 5

应用到子表单的验证组似乎被父表单中的验证忽略了。

我的子表单: 密码更新 Pass1 -> NotBlank ['groups'->'password_update'] 通行证 2

对于子表单,这是配置选项:

public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => User::class,
            'cascade_validation' => true,
            'error_bubbling' => false,
            'validation_groups' => function(FormInterface $form){
                $validation_group = [];
                if ($form->get('password_update')->getData()){
                    $validation_group = ['Default', 'password_update'];
                }else{
                    $validation_group =  ['Default'];
                }
                return $validation_group;
            }
            ]);
    }

主窗体

姓名 子窗体

对于 Mainform,这是配置选项:

public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Profesor::class,
            'cascade_validation' => true,
            'validation_groups' => false,
       ]);
    }

即使 validation_groups 设置为 FALSE,表单也会在子表单中抛出错误。

如何将验证组应用于子表单?

在父表单的 buildForm 方法中,您将选项转发给子表单,如下所示:

->add('subForm', SubformType::class, [
    'validation_groups' => $options['validation_groups'],
    // your other options
])

表单组件 "framework" 默认转发选项实际上是不可取的,因为它可能会产生意想不到的后果,因此显式转发选项是可行的方法(想象一个无意的邪恶反例不会真的很难,我想)。