2015-06-05 10 views
12

Ich habe eine Klasse wie folgt aus:wie den Zugriff auf Klassenvariablen und Konstanten in Anmerkung in Symfony 2 php

class Student { 

const GENDER_MALE = "male", GENDER_FEMALE = "female"; 
/** 
* @var string $gender 
* 
* @ORM\Column(name="gender", type="string", length=50,nullable=false) 
* @Assert\NotBlank(message="Gender cannot be blank",groups={"new"}) 
* @Assert\Choice(choices = {"male", "female"}, message = "Choose a valid gender.", groups={"new"}) 
*/ 
private $gender; 

ich die Werte "male" und "female" zu hart Code. Ist es möglich, so etwas zu tun?

Auswahl = {self :: GENDER_MALE, self :: GENDER_FEMALE}

+3

Verwenden 'callback' Option statt und in der Methode können Sie Array Ihre Konstanten zurück. –

+0

sieht wie eine gute Alternative aus. Danke – sonam

Antwort

21

Dies ist ein Merkmal von Doctrine2 Annotation Reader (Constants).

Sie Lösung:

class Student 
{ 
    const GENDER_MALE = "male", GENDER_FEMALE = "female"; 

    /** 
    * @var string $gender 
    * 
    * @ORM\Column(name="gender", type="string", length=50,nullable=false) 
    * @Assert\NotBlank(message="Gender cannot be blank",groups={"new"}) 
    * @Assert\Choice(
    *  choices = { 
    *   Student::GENDER_FEMALE: "Female", 
    *   Student::GENDER_MALE: "Male" 
    *  }, 
    *  message = "Choose a valid gender.", groups={"new"} 
    *) 
    */ 
    private $gender; 
} 
+0

In Ihrem Beispiel sollte beachtet werden, dass Sie die Use-Anweisung hinzufügen müssen, wenn Sie mit anderen Klassen verknüpfen. – webDEVILopers

+0

Haben Sie Ihr Beispiel @ZhukV versucht? Ich habe gerade eine use-Anweisung und eine externe Klasse ausprobiert und leider werden die Konstanten nicht benutzt. Vielleicht funktionieren die Doctrine-Anmerkungen nicht mit @Assert? Es scheint jedoch mit Expressionen zu arbeiten: http://StackOverflow.com/a/34479472/1937050 – webDEVILopers

+0

@WebDEVILopers, bitte nicht Doktrin Annotation und Symfony Ausdruck Sprache zusammenführen. Diese Komponenten haben Differenzlogik und Prozesse für Lese-/Prozessanmerkungen. Doctrine-Annotation liest Annotation nur aus Methode/Eigenschaft/Klasse UND NUR! Symfony-Constraints können mit jeder Logik mit Constraint-System arbeiten. – ZhukV

Verwandte Themen