Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Zend Framework][Zend_Form] getMessages zwraca pustą tablicę.
PanGuzol
post 22.02.2009, 15:08:13
Post #1





Grupa: Zarejestrowani
Postów: 353
Pomógł: 50
Dołączył: 28.07.2005
Skąd: Łaziska Górne

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


Witam.

Zrobilem sobie formularz do logowania użytkownika no i wszystko działa tyle że jeśli dane nie przejdą validacji to nie wyswietla mi żadnych komunikatów a metoda getMessages zwraca pusta tablicę.
  1. <?php
  2. private function getForm()
  3.    {
  4.        $form = new Zend_Form();
  5.        $form->setAction('/login/check/')
  6.            ->setMethod('POST');
  7.        $login = $form->createElement('text', 'login');
  8.        $login->addValidator('alnum')
  9.            ->setRequired(true)
  10.            ->setLabel('Login:');            
  11.        $password = $form->createElement('password', 'password');
  12.        $password->addValidator('alnum')
  13.            ->setRequired(true)
  14.            ->setLabel('Hasło:');
  15.        $form->addElement($login)
  16.            ->addElement($password)
  17.            ->addElement('submit', 'zaloguj', array( 'label' => 'Zaloguj'));
  18.        
  19.        return $form;
  20.    }
  21.    
  22.    /* wyświetla formularz logowania jesli nie zalogowany */
  23.    public function indexAction()
  24.    {
  25.        $this->view->title = '- Logowanie';      //ustawienie tytułu strony
  26.        if(!$this->user->hasIdentity()) //jesli nie zalogowany wyswietl formularz
  27.        {
  28.            $form = $this->getForm(); //pobranie formularza
  29.            $form->setView(new Zend_View()); //zmiana widoku aby Zend_Form działało z Smarty
  30.            $this->view->form = $form; //ustawienie formularza
  31.        }
  32.    }
  33.    
  34.    /* sprawdza poprawność wpisanych danych i loguje badź nie użytkownika */
  35.    public function checkAction()
  36.    {
  37.        if($this->_request->isPost()) //sprawdzenie czy został wysłany formularz
  38.        {
  39.            $form = $this->getForm();
  40.               if(!$form->isValid($_POST))
  41.               {
  42.                   // Nieudana weryfikacja; wyświetl formularz
  43.                $form = $this->getForm(); //pobranie formularza
  44.                $form->setView(new Zend_View()); //zmiana widoku aby Zend_Form działało z Smarty
  45.                $this->view->form = $form; //ustawienie formularza
  46.                echo '<pre>';
  47.                print_r($form->getMessages());
  48.                echo '</pre>';
  49.            }
  50.        //logowanie
  51.    }
  52. }
  53. ?>


--------------------
Sposób na życie? Uśmiech na twarzy :D
"Widzę więcej, wiem więcej, tak to jest mniej więcej"
"NIE kradnij, rząd nielubi konkurencji"
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
batman
post 22.02.2009, 16:48:58
Post #2





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Oprócz użycia setRequired musisz dodać walidator NotEmpty.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
PanGuzol
post 22.02.2009, 22:35:22
Post #3





Grupa: Zarejestrowani
Postów: 353
Pomógł: 50
Dołączył: 28.07.2005
Skąd: Łaziska Górne

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


Teraz to wygląda następująco:

  1. <?php
  2. private function getForm()
  3.    {
  4.        $form = new Zend_Form();
  5.        $form->setAction('/login/check/')
  6.            ->setMethod('POST');
  7.        $login = $form->createElement('text', 'login');
  8.        $login->addValidator('alnum')
  9.            ->addValidator('NotEmpty')
  10.            ->setRequired(true)
  11.            ->setLabel('Login:');            
  12.        $password = $form->createElement('password', 'password');
  13.        $password->addValidator('alnum')
  14.            ->addValidator('NotEmpty')
  15.            ->setRequired(true)
  16.            ->setLabel('Hasło:');
  17.        $form->addElement($login)
  18.            ->addElement($password)
  19.            ->addElement('submit', 'zaloguj', array( 'label' => 'Zaloguj'));
  20.        
  21.        return $form;
  22.    }
  23. ?>


Dalej jest pusta tablica, nawet jeśli w loginie wpisze np. '%^&$^%(&*^&*('.

Ten post edytował PanGuzol 22.02.2009, 22:36:16


--------------------
Sposób na życie? Uśmiech na twarzy :D
"Widzę więcej, wiem więcej, tak to jest mniej więcej"
"NIE kradnij, rząd nielubi konkurencji"
Go to the top of the page
+Quote Post
batman
post 23.02.2009, 08:46:25
Post #4





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Problem leży w akcji checkAction. Wywal ten wiersz i będzie działać:
  1. <?php
  2. $form = $this->getForm(); //pobranie formularza
  3. ?>

Dwa razy tworzysz forumlarz i dlatego nie masz komunikatów błędów.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
PanGuzol
post 23.02.2009, 13:01:04
Post #5





Grupa: Zarejestrowani
Postów: 353
Pomógł: 50
Dołączył: 28.07.2005
Skąd: Łaziska Górne

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


Faktycznie ^^ skopiowałem ten fragment z IndexAction i nie zwróciłem uwagi haha.gif


--------------------
Sposób na życie? Uśmiech na twarzy :D
"Widzę więcej, wiem więcej, tak to jest mniej więcej"
"NIE kradnij, rząd nielubi konkurencji"
Go to the top of the page
+Quote Post

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 - 03:42