Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Zend Framework][Zend_Form] getMessages zwraca pustą tablicę.
PanGuzol
post
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. ?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
batman
post
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.
Go to the top of the page
+Quote Post
PanGuzol
post
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
Go to the top of the page
+Quote Post
batman
post
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.
Go to the top of the page
+Quote Post
PanGuzol
post
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 (IMG:http://forum.php.pl/style_emoticons/default/haha.gif)
Go to the top of the page
+Quote Post

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: 23.08.2025 - 01:43