2016-07-13 8 views
0

유효성 검사기 & 유효성 검사기를 사용하여 사용자 엔티티의 유효성을 검사하고 싶습니다. 지금까지 폼 워크 플로우에 의해 트리거 될 때 일하고,하지만 난 수동으로 실행할 경우, 나는 검증 호출하기 전에 하나 개의 관계 I 설정을 풀어 :symfony가 관계가있는 엔티티의 유효성을 수동으로 확인합니다.

UserController : 사이트 관계와

$user = new User(); 
$user->setRoles($roles); 
$user->setSite($site); 
... 

$violations = $this->container->get('validator')->validate($user); 

사용자 엔티티 :

/** 
    * @var Site the site linked to the entity 
    * @ORM\ManyToOne(targetEntity="LCH\MultisiteBundle\Entity\Site", cascade={"all"}) 
    * @ORM\JoinColumn(name="site_id", referencedColumnName="id", onDelete="CASCADE") 
    */ 
    protected $site; 

검사기 :

public function validate($user, Constraint $constraint) 
    { 
     $email = $user->getEmail(); 

     // $site var is null while other "direct fields are filled 
     $site = $user->getSite(); 
     $roles = $user->getRoles(); 
     $username = $user->getUsername(); 

어떻게 수동으로 validat I 수 e 사전 설정 관계를 사용하는이 엔티티?

+0

저장소에서 $ 사이트를 어떻게 구할 수 있습니까? – Edu

+0

예, find ($ id) 내장 메소드로, $ id는 양식의 유형에 의해 제공됩니다. EntityManager 범위 문제에 대해 생각하십니까? – nbonniot

+0

유효성을 검사하기 전에 사용자를 계속 유지하려고 할 수 있습니다. – Edu

답변

0

내 문제는 Symfony2 형식 유효성 검사 구조에서 기원을 찾았습니다. : $ form-> handleRequest ($ request)가 실제로 폼의 유효성을 검사 할 때 모든 후크 된 유효성 검사기 (그룹, 사용자 정의 제약 및 콜백)가 트리거됩니다. 검증 해고 되었기 때문에

내 $ 사이트는 내가 솔루션은 여기에 주요 유형 disabling validation groups에 거짓말

// sumbit in this method trigger validation too early in my needs 
$form->handleRequest($request); 
$em = $this->getDoctrine()->getManager(); 
if ($form->isSubmitted() && $form->isValid() && !$isAjax) { 
    // custom processes to decide what to create 
    ... 
    // Here is the user creation 
    $user->setRoles($roles); 
    $user->setSite($site); 
    ... 
    // And the check 
    $violations = $this->container->get('validator')->validate($user); 
} 

내 $의 사용자 -> 사이트 속성을 ... 설정 오래 전에 null입니다. 그렇게하면, $ user는 validator에게 완전히 전달됩니다.

public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'validation_groups' => false, 
     )); 
    } 

이 시스템의 주된 단점

내가 수동으로 모든 상호 작용이 매우 유형에 대한 유효성 검사를 실행해야한다는 것입니다, 그러나이 유형은 여기에 의미를 충분히 복잡하다.