Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF] Zend form w osobnym bloku (sidebar)?
Forum PHP.pl > Forum > PHP > Frameworki
macpain1982
Witam,
Mozecie mi wytlumaczyc jak mozna wyswietlic formularz np. logowania lub czego kolwiek w np. prawej kolumnie layoutu zachowujac walidajcje i wszystkie inne funkcje zwiazane z Zend Form.

Pozdrawiam
droslaw
Może być tak:
  1. //layout.phtml
  2. $form = new Application_Form_Login();
  3. $form->setAction($urlToLoginAction); // Ustawiasz atrybut action formularza.
  4. echo $form;

I w odpowiednim kontrolerze załatwiasz resztę.
macpain1982
Robilem w ten sposob ale walidacja nie dziala tongue.gif
droslaw
Na pewno masz wszystko dobrze w kontrolerze? W layoucie trzeba tylko wyświetlić formularz z odpowiednim atrybutem action.
macpain1982
  1. $request = $this->getRequest();
  2.  
  3. $form = new Application_Form_Login();
  4.  
  5. if ($this->getRequest()->isPost()) {
  6. if ($form->isValid($request->getPost())) {
  7. return $this->_helper->redirector('index');
  8. }
  9. }
  10.  
  11. $this->view->form = $form;

Nic wielkiego. Podstawa, a walidacji nie ma sad.gif
droslaw
Chodzi o to, że nie sprawdza czy login i hasło pasują? Jeśli tak to poczytaj o tym jak zalogować użytkownika. Tu jest taki krótki tutorial zend-framework-auth-with-examples.
IceManSpy
Nie jestem pewien czy: return $this->_helper->redirector('index'); nie kasuje tych wiadomości. Bo zostają one wyświetole w akcji formularzu, a potem robisz przejście do index co jest równe temu, jakbyś przeszedł na inną podstronę.
droslaw
Przekierowanie wykonane jest wtedy, kiedy dane są poprawne czyli i tak nie wyświetliłoby komunikatów. Chodzi o to, że nie jest wykonywana walidacja. To jest kontroler odpowiadający za zalogowanie użytkownika, więc trzeba napisać kod sprawdzający czy login i hasło pasują. W kontrolerze go nie ma, może macpain napisał ten walidator oddzielnie i dodał w klasie formularza ale możliwe, że zapomniał o sprawdzeniu czy login i hasło pasują.
macpain1982
Póki co mam podstawową walidację np. czy pola nie są puste lub czy emial jest poprawny:
  1. $this->setMethod('post');
  2. $this->setAction('/auth/');
  3.  
  4. // Add an email element
  5. $this->addElement('text', 'email', array(
  6. 'label' => 'Email:',
  7. 'required' => true,
  8. 'filters' => array('StringTrim'),
  9. 'validators' => array(
  10. 'EmailAddress',
  11. )
  12. ));
  13.  
  14. // Add a login element
  15. $this->addElement('password', 'password', array(
  16. 'label' => 'Password:',
  17. 'required' => true,
  18. 'filters' => array('StringTrim')
  19. ));
  20.  
  21. // And finally add some CSRF protection
  22. $this->addElement('hash', 'csrf', array(
  23. 'ignore' => true,
  24. ));
  25.  
  26. // Add the submit button
  27. $this->addElement('submit', 'submit', array(
  28. 'ignore' => true,
  29. 'label' => 'Login',
  30. ));

Ogólnie walidacja działa tylko w przypdaku gdy jestem w faktycznym widoku formularza. Dodając go do layoutu już nie sad.gif
droslaw
A jak próbujesz wyświetlić ten formularz już po otrzymaniu danych. Jeśli w widoku akcji login masz:
  1. echo $this->form;

komunikaty powinny pojawić się w formularzu, który masz w widoku login. Jeśli chcesz mieć komunikaty w tym formularzu, który wyświetlasz w layoucie, trzeba zrobić to np. tak:
  1. //layuot.phtml
  2. if(!isset($this->loginForm))
  3. {
  4. $this->loginForm = new Application_Form_Login();
  5. }
  6. echo $loginForm;
  7.  
  8. // kontoroller
  9. $this->view->loginForm = $form;
macpain1982
Cytat(droslaw @ 17.02.2012, 14:28:47 ) *
  1. echo $loginForm;

Co to jest za zmienna i skad ja pobieram ?
droslaw
W kontrolerze
  1. $request = $this->getRequest();
  2. $form = new Application_Form_Login();
  3. if ($request->isPost()) {
  4. if ($form->isValid($request->getPost())) {
  5. return $this->_helper->redirector('index');
  6. }
  7. }
  8. $this->view->loginForm = $form;

I loginForm jest teraz widoczne w layoucie. To jest formularz wypełniony danymi i zawierający odpowiednie komunikaty. Sam zrobiłbym to tak, że w przypadku kiedy user podał błędne dane wyświetliłby formularz jeszcze raz ale w widoku login, nie layoucie. To moim zdaniem wyglądałoby lepiej i błędy byłyby wyraźnie widoczne w miejscu na którym użytkownik najpierw powinien skupić uwagę.
macpain1982
Spoko dzieki zrobilem to w podobny sposob jak tutaj http://stackoverflow.com/questions/2306374...using-zend-form

Pozdrawiam
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.