2012-08-24 32 views
1

嗨我想嵌入部分從FOSUserBundle註冊表單到另一個。當我嘗試添加現有電子郵件時,由於未使用唯一驗證程序,因此引發了「完整性約束違規」異常。我怎樣才能解決這個問題。當註冊表單獨使用時,驗證器工作正常。嵌入時驗證規則不起作用FOSRegistrationFormType

主要形式有:

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'; 
    } 

} 

回答

2

添加cascade_validation將驗證在嵌入式形式工作。

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


    }