Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [ZF][ZendFramework] Pole select waliduje się niepoprawnie
Vill
post 14.12.2014, 14:42:38
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
  1. $client_login = $this->createElement('select', 'client', array('label' => 'Wybierz klienta:'));


Potem uzupełniam w odpowiednim kontrolerze pobierającym wcześniej dane z bazy (formularz w zmiennej $this->createForm)
  1. $stmt = $this->db->query($select);
  2. $result = $stmt->fetchAll();
  3.  
  4. $clientSelect = $this->createForm->getElement('client');
  5.  
  6. $clientSelect->addMultiOption(null, 'Brak klienta');
  7.  
  8. foreach($result as $c) {
  9. $clientSelect->addMultiOption($c['ClientLogin'], $c['ClientLogin']);
  10. }


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Lysiur
post 14.12.2014, 17:55:09
Post #2





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:


  1. //Formularz
  2. class Application_Form_CreateEvent extends Zend_Form {
  3. public function init() {
  4. //......
  5. }
  6.  
  7. public function setClientsOption(array $clients) {
  8. $this->getElement('client')->setMultioptions($clients);
  9. }
  10.  
  11. }
  12.  
  13. //Controller
  14. class SomeController {
  15.  
  16. private function getForm() {
  17.  
  18. $clients = array(); //Lista klientów do wyświetlenia
  19.  
  20. $form = new Application_Form_CreateEvent();
  21. $form->setClientsOption($clients);
  22. return $form;
  23. }
  24.  
  25. public function createAction() {
  26. $form = $this->getForm();
  27. //....
  28. $this->view->form = $form;
  29. }
  30.  
  31. public function createformAction() {
  32. $form = $this->getForm();
  33.  
  34. if($form->isValid()) {
  35. //...
  36. }
  37.  
  38. }
  39.  
  40. }


Generalnie chodzi o to, byś formularz (już ze wszsytkimi opcjami) pobierał w jednolity sposób do akcji wyświetlania i zapisu.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 21:29