Wpis z mikrobloga

jak w symfony zrobić w modelu walidacje na zasadzie jeśli wartość innego pola jest mniejsza od jakiejś tam liczby to inne pole nie może być puste ? po prostu w setterze tego innego pola dodać taki warunek czy może da się to zrobić jakoś adnotacjami ?
#php #symfony2 #symfony
  • 23
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@MacDada: no ta, tylko że ja nie chce na pojedyncze pole, bo ma to być też zależne od innego pola i w tym walidatorem na cały obiekt wygląda to po prostu wygodniej z dostępem do całego obiektu, także skorzystam chyba z callbacka tylko że do oddzielnego pliku statycznej metody bo wygląda to w miarę spoko
  • Odpowiedz
no ta, tylko że ja nie chce na pojedyncze pole, bo ma to być też zależne od innego pola


@Jurigag: Dlatego napisałem przecież…

Walidator zakładasz wtedy na cały obiekt, a nie pojedyncze
  • Odpowiedz
@MacDada: tylko jak wtedy w tym constraincie odwołać się do innego pola ? a co myślisz o tym rozwiązaniu z expression ze stacka ?

a dobra w sumie jest w tym linku co wysłał uirapuru, to jakie rozwiązanie lepszze, callback czy constraint ?
  • Odpowiedz
@Jurigag: callback zazwyczaj jest powiązany tylko z klasa, którą walidujesz. ewentualnie wrzucisz go do forma. constraint pozwoli Ci stworzyć reużywalny kod i rozłączy encję od walidacji.
  • Odpowiedz
@uirapuru: ale przecież ten constraint może być też na całą klasę z tego co widzę w przykładzie - także nadal średnio rozłącza to encję od walidacji bo przecież w metodzie validate i tak odwołuję się do konkretnych pól, da radę jakoś żeby constraint był na dane pole i jednocześnie przekazać do niego cały obiekt oraz nazwy pól ?
  • Odpowiedz
@Jurigag: jesli zrobisz umiejętnie, albo chociaż prosto, to się nie wysypie ;) można napisać jakiś akcesor, albo coś podobnego - odsyłam do programowania funkcyjnego, monad i tak dalej ;)
  • Odpowiedz
@Jurigag: hm, nie jestem pewien, czy taka choinka jest konieczna. Wybacz, nie chce mi się je całej analizować - dodanie błędu opanowałeś. Co do exceptionów - wywaliłbym je i rozwiązał to przez nadanie walidowanym klasom interfejsu, a następnie rzucał exception tylko, jeżeli obiekt nie implementuje tego interfejsu. ale gdybam sobie, bo nie wiem do czego i jak Ci to potrzebne :) to chyba programowanie kontraktowe się nazywa, ale głowy nie
  • Odpowiedz
@uirapuru: hmm interfejs nie wiem za bardzo jak miałby mi tu pomóc :P chyba że jedynie tyle żeby kod skrócić to w sumie okej :P bo bym musiał tworzyć interfejs dla kazdej z tych klas.
  • Odpowiedz
@Jurigag: Robisz sobie interfejs "validableByMyConstraintInterface", implementujesz go w encjach i sprawdzasz obiekt, czy ma ten interfejs. On z kolei wymusza posiadanie odpowiednich metod przez encje. Tyle :)
  • Odpowiedz
@uirapuru: tylko ze problem w tym ze nie wiem jakie będą te metody, może być w dodatku kilka grup takich pól dla których chce walidacje robić tak jak napisałem w wpisie
  • Odpowiedz