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
@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
@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.
@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 ?
@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 ;)
@uirapuru: http://pastebin.com/sjNM9kiz takie coś wymodziłem, dobrze rozumiem sens działania tego ? w dodatku mam symfony 2.6.x a w phpstormie mi nie widzi buildViolation metody i muszę korzystać z deprecated :x
@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
@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.
@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 :)
@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
#php #symfony2 #symfony
* https://stackoverflow.com/questions/12260705/how-to-validate-a-property-dependent-on-another-property-in-symfony-2
* http://symfony.com/doc/current/book/validation.html#classes
http://symfony.com/doc/current/cookbook/validation/custom_constraint.html
@Jurigag: Dlatego napisałem przecież…
a dobra w sumie jest w tym linku co wysłał uirapuru, to jakie rozwiązanie lepszze, callback czy constraint ?