2013-03-18 3 views
10

엔티티의 모든 유효성 검사 제약 조건을 얻는 방법을 연구 중입니다. (달성하려는 것은 JSON에서이 데이터를 반환하고 JQuery 유효성 검사 플러그인을 사용하여 클라이언트 측에서 동일한 제약 조건을 적용하는 것입니다) 그러나, 여기 내 현재 코드의 제약을 받고 몇 가지 문제가 메신저 : 제약 속성에 대한Symfony2가 엔티티에 대한 유효성 검사 제한을 받음

내가 $ 메타 데이터에 무엇을 얻을
$metadata = new \Symfony\Component\Validator\Mapping\ClassMetadata("Namespace\JobBundle\Entity\Job"); 
    $annotationloader = new AnnotationLoader(new AnnotationReader()); 
    $annotationloader->loadClassMetadata($metadata); 

가 빈 배열, 나머지 ($ 속성과 $ 회원 만이 오류 메시지 ...하지만 실제 제약 조건 (예 : 필수, 정수 ...))이 아닙니다.

무엇이 잘못 되었나요?

+0

getMetadataFactory() -> getClassMetadata ("Namespace \ JobBundle \ Entity \ Job");'$ metadata = $ this-> 컨테이너 -> get ('유효성 검사기')를 시도 했습니까? –

+0

그냥 $ 속성 특성 실제로 제약 조건 배열을 포함하는 것으로 나타났습니다, 귀하의 제안도 동일한 결과를 제공하므로 만약 당신이 대답을 기꺼이 받아 들일 것입니다. – Youssef

답변

15

새 클래스 메타 데이터를 인스턴스화하는 대신 유효성 검사기 서비스를 사용할 것입니다. 일부 클래스가 서비스를 통해 초기화되는지 여부는 알 수 없습니다.

$metadata = $this->container 
       ->get('validator') 
       ->getMetadataFactory() 
       ->getClassMetadata("Name‌​space\JobBundle\Entity\Job"); 

$metadata 당신이

심포니 2.3 이상

$metadata = $this->container 
       ->get('validator') 
       ->getMetadataFor("Name‌​space\JobBundle\Entity\Job"); 
+1

+1, symfony 2.3에서 btw'getClassMetadata'는 사용되지 않으며'getMetadataFor'가 권장됩니다. –

5
private function getValidations() 
    { 
     $validator=$this->get("validator"); 
     $metadata=$validator->getMetadataFor(new yourentity()); 
     $constrainedProperties=$metadata->getConstrainedProperties(); 
     foreach($constrainedProperties as $constrainedProperty) 
     { 
      $propertyMetadata=$metadata->getPropertyMetadata($constrainedProperty); 
      $constraints=$propertyMetadata[0]->constraints; 
      foreach($constraints as $constraint) 
      { 
       //here you can use $constraint to get the constraint, messages etc that apply to a particular property of your entity 
      } 
     } 
    } 

$ 유효성 검사기 = $ this->의 get ("검증") 찾고있는 데이터가 있어야합니다;를
$ metadata = $ validator-> getMetadataFor (new yourentity());

개체 $ metadata에는 특정 엔터티와 관련된 유효성 검사에 대한 모든 메타 데이터가 포함됩니다.