Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [ZF][ZendFramework] Walidacja formularza w innym kontrolerze
Vill
post
Post #1





Grupa: Zarejestrowani
Postów: 62
Pomógł: 0
Dołączył: 22.05.2009

Ostrzeżenie: (0%)
-----


Mam w jednym kontrolerze różne formularze. Każdy formularz ma akcję, która buduje formularz oraz akcję, która jest umieszczana w parametrze action formularza i zajmuje się przetworzeniem danych z formularza. Gdy zbudowanie formularza + walidacja + przetworzenie danych znajdowały się w jednym kontrolerze to walidacja formularza działała bez problemu, natomiast gdy rozdzieliłam budowe formularza i przetworzenie danych na osobne akcje, walidacja przestała działać. Dlaczego i jak zrobić żeby w ten sposób działała?

Mam mniejwięcej coś takiego:

Inicjalizacja formularza w kontrolerze
  1. public $form;
  2.  
  3. //inicjalizacja kontrolera
  4. public function init() {
  5.  
  6. $this->form = new Zend_Form();
  7.  
  8. }


zbudowanie formularza

  1.  
  2. public function formAction(){
  3.  
  4. $this->form->setMethod('post')
  5. ->setAction('/client/formdata');
  6.  
  7. //elementy
  8. $login = $this->form->createElement('text', 'login', array('label' => 'Login:'));
  9. ....
  10. //walidatory
  11. $login->addValidator('stringLength', true, array(2, 20));
  12. ....
  13. //filtry
  14. $login->addFilters(array('StringTrim', 'StripTags'));
  15. ....
  16.  
  17. //złożenie formularza
  18. $this->form->addElement($login)
  19. ....
  20. ->addElement($submit);
  21.  
  22. //przekazanie formularza do widoku
  23. $this->view->form = $this->form;
  24.  
  25.  
  26. }


action formularza:

  1.  
  2. public function formdataAction(){
  3.  
  4. if ($this->_request->isPost() && $this->form->isValid($_POST)) {
  5.  
  6. ..przetworzenie danych...
  7.  
  8. } else {
  9. $this->view->alert = '<div class="red-alert">Błąd. Sprawdź poprawność danych</div>';
  10. }
  11. }


Co trzeba zrobić aby walidacja zadziałała, albo chociaż żeby formularz nie przepuszczał niepoprawnych danych? W tym momencie pozwala zapisywać w bazie wszystko.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Vill
post
Post #2





Grupa: Zarejestrowani
Postów: 62
Pomógł: 0
Dołączył: 22.05.2009

Ostrzeżenie: (0%)
-----


Nie wpisuje mi do bazy danych, które nie przeszły walidacji. Jeżeli mam coś takiego w kontrolerze

  1. .....
  2.  
  3. //walidacja
  4. if ($this->form->isValid($this->_request->getPost())) {
  5.  
  6. //zebranie danych z formularza
  7. $data = array(
  8. ......
  9. );
  10.  
  11. //update rekordu
  12.  
  13. $check = $this->clientTable->update($data, 'ClientLogin = "'.$login.'"');
  14.  
  15. if($check<=0){
  16. $this->view->alert = '<div class="red-alert">Błąd połączenia z bazą lub wysłane dane nie różnią się od już istniejących.</div>';
  17. return;
  18. }
  19.  
  20. $this->view->alert = '<div class="green-alert">Udało się</div>';
  21. } else {
  22.  
  23. $this->view->alert = '<div class="red-alert">Błąd. Nie przeszło walidacji.</div>';
  24.  
  25. }
  26.  


To wyświetla się napis "Błąd. Nie przeszło walidacji". Chciałabym zrobić taki efekt, że w przypadku niepoprawnych danych formularz wyświetla się ponownie z komunikatami, w którym polu są błędne dane i dlaczego. Redirect na formularz załaduje czysty formularz.

Gdy wszystko znajduje się w jednym kontrolerze, to formularz po prostu odświeża się, ale posiada już dodatkowe pola pod inputami informujące które dane nie przeszły walidacji i dlaczego. Np. 'pole musi posiadać więcej niż 2 i mniej niż 25 znaków' (po angielsku oczywiście). Chcę uzyskać taki sam efekt. Czy to jest w ogóle możliwe?
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 15.10.2025 - 05:50