Pytanie jak uzyskać dostęp do zmiennych klasowych i stałych w adnotacji w symfony 2 php


Mam taką klasę:

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;

Muszę mocno zakodować wartości "male" i "female". Czy można zrobić coś takiego?

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


14
2018-06-05 15:17


pochodzenie


Posługiwać się callback opcja zamiast tego, aw metodzie możesz zwrócić tablicę stałych. - Przemysław Piechota. kibao
wygląda na dobrą alternatywę. dzięki - sonam


Odpowiedzi:


Jest to cecha Doctrine2 Annotation Reader (Stałe).

Twoje rozwiązanie:

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

23
2018-06-06 07:40



W twoim przykładzie należy zauważyć, że musisz dodać instrukcję użycia, jeśli łączysz się z innymi klasami. - webDEVILopers
Czy próbowałeś swojego przykładu @ZhukV? Właśnie wypróbowałem instrukcję użycia i klasę zewnętrzną i niestety stałe nie są używane. Może adnotacje do Doctrine nie będą działać z @Assert? Wydaje się jednak działać z wyrażeniami: stackoverflow.com/a/34479472/1937050 - webDEVILopers
@webDEVILopers, proszę nie łączyć adnotacji doktrynalnych i języka wyrażeń symfony. Komponenty te mają logikę różnicową i procesy dotyczące adnotacji odczytu / procesu. Adnotacja Doktryna czyta tylko adnotację od metody / właściwości / klasy I TYLKO JA! Ograniczenia symfony mogą działać z dowolną logiką z systemem ograniczeń. - ZhukV
Dzięki @ZhukV! Rzeczywiście działa następująca wersja: gist.github.com/webdevilopers/... - webDEVILopers
Próbuję użyć assert \ choice z multiple = false i expanded = false, ponieważ używam ich w normalnym typie FormType. multiple działa dobrze, ale rozszerza wyrzuca wyjątek, sprawdziłem dokumentację i nie ma rozwiniętej opcji .. jakiś pomysł jeśli czegoś brakuje? - george rizk