Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework] - automatyczne szukanie szablonu
Forum PHP.pl > Forum > PHP > Frameworki
Crazy_Ivan
Na początku chciałbym zaznaczyć że dopiero zaczynam przygodę z ZF dlatego prosił bym o wyrozumiałość. Problem mój jest prawdopodobnie trywialny lecz odpowiedz w dokumentacji jakoś nie rzuciła mi się w oczy. Sytuacja wygląda następująco:
Posiadam controller AuthController w którym to miedzy innymi posiadam metodę loginAction(). Metoda ta na początku sprawdza czy czy zostały wysłane dane _POST. Jeżeli nie to ustawiam $this->_request->setControllerName('error'); jeżeli tak to sprawdzam oczywiście czy są poprawne dane wprowadzone. Jeżeli tak to redirect, jeżeli nie to wysyłam zmienna z tekstem błędu i renderuje podstronę w zależności z której zostały te dane wysłane. Nadmienię jeszcze że na każdej podstronie mam mały panel do logowania. Problem mój polega na tym że dostaje wyjątek o braku pliki szablonu login.phtml. Oczywiście rozumiem dlaczego tak jest, lecz w moim przykładzie tego szablonu nie potrzebuję,a wstawiać pusty plik w projekt tylko dlatego żeby był uważam za kiepski pomysł. Zwracam się więc z prośbą do szanownych Pań/Panów o pomoc.
batman
A nie byłoby prościej zrobić helpera z formularza do logowania? Wówczas nie potrzebowałbyś żadnego pliku login.phtml (zakładam, że ten plik zawiera formularz logowania). Helpera mógłbyś wczytywać w dowolnym momencie w plikach widoku lub w layoucie.
Crazy_Ivan
w pliku login.phtml nie posiadam nic , formularz mam na stałe wpisany w layout główny. Chodzi o to że jeśli posiadam klasę AuthController i w niej metodę loginAction() to system po wykonaniu jakiegoś tam kodu szuka pliku login.phtml z zamiarem renderowania go. Ja natomiast chce renderować inny szablon niż login.phtml . W jaki sposób zmusić frama by zaprzestał szukania login.phtml i wyrenderował zadany mu w metodzie szablon.
batman
Do wyłączenia renderowania pliku widoku służy
  1. <?php
  2. $this->_helper->viewRenderer->setNoRender(true);
  3. ?>

Do renderowania innego pliku widoku możesz użyć
  1. <?php
  2. $this->_helper->viewRenderer('foo');
  3. ?>

Szczerze przyznam, że nie używałem tej drugiej funkcji, więc nie wiem dokładnie jak się zachowa. Info o tym znajdziesz w dokumentacji.
mike
Wyłaczyć renderowanie można również tak:
  1. <?php
  2.  
  3. Zend_Controller_Front::getInstance()->setParam('noViewRenderer', true);
  4.  
  5. ?>
Crazy_Ivan
dokładnie o to chodziło smile.gif. Wielkie dzięki za szybką odpowiedz.
  1. <?php
  2.  
  3. class AuthController extends My_Controller_Action
  4. {
  5. function loginAction()
  6. {
  7. if($this->_request->isPost())
  8. {
  9. //sprawdz dane 
  10. }
  11. else
  12. {
  13. $this->_helper->layout->disableLayout();
  14. $this->_helper->viewRenderer('/error/error',null,true);
  15. }
  16. }
  17.  
  18. function logoutAction()
  19. {
  20. ZendAuth::getInstance()->clearIdentity();
  21. $this->_redirect('/');
  22. }
  23.  
  24. }
  25.  
  26. ?>
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.