嵌入FOSRegistrationFormType时验证规则不起作用

时间:2012-08-24 11:23:52

标签: php fosuserbundle symfony-2.1 symfony-sonata

您好我想将FOSUserBundle的部分注册表格嵌入到另一个注册表格中。当我尝试添加现有电子邮件时,由于未使用唯一验证程序,因此引发了“完整性约束违规”异常。我怎样才能解决这个问题。当单独使用注册表单时,验证器工作正常。

主要形式:

class SoldierType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ...
            ->add('user', new NameFormType('Application\Sonata\UserBundle\Entity\User')) 

        ;

    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'validation_groups' => array('registration')
        ));

    }

    public function getName()
    {
        return 'wnc_soldierbundle_soldiertype';
    }
}

NameForm

namespace Application\Sonata\UserBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use FOS\UserBundle\Form\Type\RegistrationFormType as BaseForm;

class NameFormType extends BaseForm
{

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('firstname')
                ->add('lastname')
                ->add('email', 'email', array('label' => 'form.email', 'translation_domain' => 'FOSUserBundle'));

    }


    public function getName()
    {
        return 'fos_user_name';
    }

}

1 个答案:

答案 0 :(得分:2)

添加cascade_validation将使验证在嵌入表单中工作。

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'validation_groups' => array('Registration'),
            'cascade_validation' => true,
        ));


    }