![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 62 Pomógł: 0 Dołączył: 22.05.2009 Ostrzeżenie: (0%) ![]() ![]() |
Mam pole select, które zawiera wartość nullową i kilku klientów do wyboru. Walidacja przechodzi poprawnie tylko w przypadku wyboru wartości null, w przypadku wyboru jakiegoś klienta to nie przechodzi. Nie mam ustawionych na tym polu żadnych walidatorów ani filtrów.
Polę buduję w ten sposób: Tworzę pole w klasie dziedziczącej po Zend_Form budującej formularz Potem uzupełniam w odpowiednim kontrolerze pobierającym wcześniej dane z bazy (formularz w zmiennej $this->createForm)
No i przekazuję formularz do widoku. Gdzie może leżeć błąd? Dlaczego walidacja nie przepuszcza wszystkich wartości? Ten post edytował Vill 14.12.2014, 14:44:24 |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%) ![]() ![]() |
Zobacz jak wygląda rzeczywiście select poprzez "Zbadaj element"
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 62 Pomógł: 0 Dołączył: 22.05.2009 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 66 Pomógł: 11 Dołączył: 25.07.2012 Ostrzeżenie: (0%) ![]() ![]() |
Wyglada na to, że po wysłaniu formularza, nie jest on prawidłowo zbudowany. Fragment z foreachem się nie wykonuje. Pokaż może jak wygląda fragment controllera gdzie budujesz formularz i validujesz requesta
Ten post edytował Lysiur 14.12.2014, 16:05:03 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 62 Pomógł: 0 Dołączył: 22.05.2009 Ostrzeżenie: (0%) ![]() ![]() |
Klasa z formularzem
Akcja kontrolera uzupełniająca ten formularz o dodatkowe dane:
Akcja kontrolera przetwarzająca dane z formularza:
Ten post edytował Vill 14.12.2014, 16:34:32 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 66 Pomógł: 11 Dołączył: 25.07.2012 Ostrzeżenie: (0%) ![]() ![]() |
Okej, co prawda nie jak wiem co dokładnie siedzi w zmiennej $this->createForm, ale zakładam, że w controllerze ( w init) tworzysz formularz i go wkładasz do $this->createForm.
Twój problem z formularzem na tym, że w metodzie createAction() uzupełniasz opcje związane nowymi pozycjami (select). Natomiast po wysłaniu requesta, do metody createformAction(), formularz jest czysty (to nie ten sam obiekt co zbudowany w createAction()) i nie posiada dodatkowych pozycji w selekcie. W akcji przetwarzającej ten formularz także musisz go uzupełnić (przed walidacją) o możliwe do wyboru pozycjie inaczej formularz będzie krzyczał, że nie ma opcji. Zrób sobie mniejwięcej coś takiego:
Generalnie chodzi o to, byś formularz (już ze wszsytkimi opcjami) pobierał w jednolity sposób do akcji wyświetlania i zapisu. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 62 Pomógł: 0 Dołączył: 22.05.2009 Ostrzeżenie: (0%) ![]() ![]() |
Faktycznie masz rację. Ale to dziwne, ponieważ wszystkie wartości, które wpisuję w ukryte inputy są widoczne w każdej akcji (jeśli ją podepnę do action formularza). Testowałam też na polach 'text' i także ich wartości są widoczne w każdej akcji. Tylko select coś się resetuje. Ale pokombinuję jeszcze i może coś mi się uda z tym zrobić.
Dzięki! |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 66 Pomógł: 11 Dołączył: 25.07.2012 Ostrzeżenie: (0%) ![]() ![]() |
Dzieje się tak ponieważ 'wartości' są przekazywane do formularza z requesta, poprzez metodę $form->isValid(requrest), natomiast same opcje poszczególnych pól należą do obiektu Form i nie są one przekazywane z requestem.
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 62 Pomógł: 0 Dołączył: 22.05.2009 Ostrzeżenie: (0%) ![]() ![]() |
No tak, wiem, tylko myślałam że na wartości walidowane po submicie nie wpływa struktura pola, że sama wartość wybranej opcji jest brana pod uwagę podczas walidacji. A wartości przychodzą dobre.
Zrobiłam teraz tak, że waliduje to pole osobno klasycznym czysto phpowym sposobem, potem je usuwam i na formularzu z usuniętym polem wywołuje isValid() żeby walidowała się cała reszta. Może i trochę nachalne rozwiązanie ale szybkie i niezbyt kłopotliwe. Jak zostanie czasu to wykombinuję coś ładniejszego ![]() Ten post edytował Vill 15.12.2014, 20:03:29 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 06:32 |