2012-05-11 3 views
3

Doctrine mongodb 문서를 가지고 있습니다. 문서에는 두 개의 emebedOne 문서가 있으며이 문서도 양식에 있습니다. 주 문서의 유효성을 검사하고 있지만 포함 된 문서는 유효하지 않습니다. 나는 사용자 정의 주장을 사용하고 있지만 나는 그것이 중요하다고 생각하지 않는다.Symfony2 Doctrine ODM embed 클래스 폼 유효성 확인

문서는

 
    class AccountRecord{ 
    /** 
    * @MongoDB\Id 
    */ 
    private $id; 

    /** 
    * @MongoDB\Field(type="BimcoreEmail") 
    * @Assert\Email 
    * @Assert\NotNull 
    * @CustomAssert\BimcoreEmail 
    */ 
    private $email; 

    /** 
    * Access Admin 
    * 
    * @MongoDB\Boolean 
    */ 
    private $access_admin = 0; 


    /** @MongoDB\EmbedOne(targetDocument="vidAccountSettings") */ 
    private $vid; 
    } 

는 사용자가이를 주장 임베디드 클래스는 호출되지 않습니다.

 
/** @MongoDB\EmbeddedDocument */ 
class vidAccountSettings { 
    /** 
    * Share section path 
    * 
    * 
    * @MongoDB\Field(type="Url") 
    * @CustomAssert\Url 
    */ 
    private $sharePath; 
} 

형태

 
class AccountEditFormType extends AbstractType 
{ 
    /** 
    * Builds the embedded form representing the user. 
    * 
    * @param FormBuilder $builder 
    * @param array  $options 
    */ 
    public function buildForm(FormBuilder $builder, array $options){ 
     $builder 
      ->add('prefix', 'hidden', array('required' => false)) 
      ->add('vid.access', 'checkbox', array('required' => false)) 
      ->add('vid.googleAnalytics', 'text', array('required' => false)) 
      ->add('vid.liveRail', 'text', array('required' => false)) 
      ->add('vid.sharePath', 'url', array('required' => false)) 
      ; 
    } 

    public function getDefaultOptions(array $options) 
    { 
     return array(
      'intention' => 'editAccount', 
      'cascade_validation' => true, 
     ); 
    } 

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



}

핸들러 도움을

 
class AccountEditFormHandler 
{ 
    protected $request; 
    protected $userManager; 
    protected $form; 

    public function __construct(Form $form, Request $request, BimcoreAccountManager $accountManager) 
    { 
     $this->form = $form; 
     $this->request = $request; 
     $this->accountManager = $accountManager; 
    } 

    public function process($account) 
    { 
     // set the data in the form for the current account. 
     $this->form->setData($account); 

     if ('POST' === $this->request->getMethod()) { 

      $this->form->bindRequest($this->request); 
      if ($this->form->isValid()) { 
       $this->onSuccess($account); 
       return true; 
      } else { 
      } 
     } 

     return false; 
    } 


    protected function onSuccess(BimcoreAccountRecord $account) 
    { 
     // update the account data. 
     $this->accountManager->updateAccount($account); 
    } 
} 

감사합니다.

답변

6

확인

코리, 나는이 문제를 파악, 당신은 당신이 유효성을 검사 할 내장의 기록에 어설 유효한 문을 설정해야합니다.

 
/** @MongoDB\EmbedOne(targetDocument="vidAccountSettings") 
    * @Assert\Valid 
    */ 
    private $vid;