2013-03-18 9 views
10

Ich arbeite an einer Methode, um alle Validierungseinschränkungen einer Entität zu erhalten (was ich versuche, diese Daten in JSON zurückzugeben und dieselben Einschränkungen auf Clientseite mit JQuery Validation Plugin anzuwenden) aber im, einige Mühe, die Einschränkungen hat, Hier ist meine aktuellen Code ist:Symfony2 Validierungsbeschränkungen für eine Entität erhalten

$metadata = new \Symfony\Component\Validator\Mapping\ClassMetadata("Namespace\JobBundle\Entity\Job"); 
    $annotationloader = new AnnotationLoader(new AnnotationReader()); 
    $annotationloader->loadClassMetadata($metadata); 

, was ich in $ Metadaten erhalten, ist ein leeres Array für die Zwänge Attribut, der Rest (Eigenschaften $ und die Mitglieder haben nur $ die Fehlermeldungen ... aber nicht die tatsächlichen Einschränkungen (zB: required, integer ...)).

Was mache ich falsch?

+0

Haben Sie versucht, $ metadata = $ this-> container-> get ('validator') -> getMetadataFactory() -> getClassMetadata ("Namespace \ JobBundle \ Entity \ Job"); '? –

+0

gerade festgestellt, dass das $ -Eigenschaften Attribut enthält tatsächlich ein Constraints-Array, schlägt Ihr Vorschlag auch das gleiche Ergebnis, so wenn Sie die Antwort machen würde ich gerne akzeptieren. – Youssef

Antwort

15

Ich würde wahrscheinlich den Validator-Dienst verwenden, anstatt eine neue Klassenmetadaten zu instanziieren. Sie wissen nie, ob einige Klassen über den Service initialisiert werden.

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

und $metadata sollten die Daten, die Sie suchen

Symfony 2.3 und oben

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

+1, später von Symfony 2.3 'getClassMetadata' ist veraltet und' getMetadataFor' wird empfohlen. –

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

$ validator = $ this-> get ("Validator");
$ metadata = $ validator-> getMetadataFor (neue yuerenity());

Das Objekt $ metadata enthält jetzt alle Metadaten zu Validierungen, die Ihre spezifische Entität betreffen.

Verwandte Themen