Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Zend Framework][Zend_Form] getMessages zwraca pustą tablicę.
Forum PHP.pl > Forum > PHP > Frameworki
PanGuzol
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. ?>
batman
Oprócz użycia setRequired musisz dodać walidator NotEmpty.
PanGuzol
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. '%^&$^%(&*^&*('.
batman
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.
PanGuzol
Faktycznie ^^ skopiowałem ten fragment z IndexAction i nie zwróciłem uwagi haha.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.