Wpis z mikrobloga

Witajcie mirki!

Mam na stronce formularz. W moim głównym formularzu tworzę 3 formularze używając CollectionType. W tym podformularzu zbieram liczby. Suma liczb ma być nie większa niż 100.
W kontrolerze sprawdzam, czy suma jest >100, jeżeli jest większa, to chciałbym do formularza dodać błąd, żeby poinformować użytkownika o tym. Niestety nie wiem jak dodać błąd do pola podformy. Może ktoś coś może mi podpowiedzieć?

Tak pobieram formularz:

$project_annex_users = $form->get('project_annex_users')->getData();
tak pobieram liczby z podformularza:

foreach ($project_annex_users as $project_annex_user) {
$total_percent += $project_annex_user->getPercent();

}

i nie wiem co dalej.

#php #symfony2 #webdev #webdevhelp
  • 7
@wiktor12348: @Jurigag: Widziałem te validatory i constrainty, ale nie wiem w jaki sposób mam zwalidować 3 takie same pola. Tzn. mógłbym w $form->builder() zadeklarować constraint i tyle, ale tutaj mam 3 takie same obiekty, muszę pobrać z nich wartosć i sprawdzić czy ich suma nie jest większa niż 100.
@mariecziek: Możesz walidować poszczególne pole lub cały obiekt. Nawet jak walidujesz pole, masz dostęp do obiektu. Jak masz collection to wywołujesz jedynie odpowiedniego geta, zwróci tablice obiektów (bo dane przed walidacją zostały już zbindowane na obiekt) i będziesz mógł wykonać foreacha i policzyć co trzeba.

Generalnie controllery powinny być chude, cała walidacja powinna być w Type'ie (formularzu: AbstractType) i pochodnych mechanizmach np. constraint'cie. Samo isValid() powinno zwracać odpowiednie komunikaty.

Potencjalnie dobry
@wiktor12348: Wiem, że kontrollery mają być chude, ale projekt był napisany w SF 2.0 lub 2.1. Czasami metody mają po kilkaset linijek (akurat ta medota ma 400) i trzeba to w cholerę przepisać, bo zaczyna wolno działać.

Niestety, po roku pracy w tej firmie, poznałem tylko podstawy sf2 i mogę klepać stronki na sf, ale jeżeli muszę zrobić coś trudniejszego, to mam kłopot i piszę na Mirko, bo wiem, że są