Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework]Wieleokrotnie powtarzany kawałek kodu
Forum PHP.pl > Forum > PHP > Frameworki
johnyMajster
Witam serdecznie w celu sprawdzenia czy użtkownik jest zalogowany stosuję cos takiego z Gajdy:
  1. public function preDispatch()
  2. {
  3. $auth = Zend_Auth::getInstance();
  4. if (!$auth->hasIdentity()) {
  5. return $this->_helper->redirector(
  6. 'index',
  7. 'auth',
  8. 'default'
  9. );
  10. }
  11. $this->view->identity = $auth->getIdentity();
  12. }


Mam jednak pewien kontroler który nie moze byc predispatch poniewaz tylko niektóre akcje są chronione.

Chciałbym zapytac co zrobic z powyzsza funkcją aby wykorzystywac ją w kazdej wybranej akcji z osobna a nie predispatchowac. Mogę robic:
a)kopiuj wklej w kazdej akcji ale to bez sensu
b)Stworzyc w library klase z taką funkcją i ją wywołac (f statyczna?)
c)...questionmark.gif?
irmidjusz
action helper powinien się nadać
murwazy
  1. function preDispatch() {
  2.  
  3. $this_action_name = $this->_request->getActionName(); // nazwa akcji, np account-edit
  4.  
  5. $must_login = array('account', 'account-edit'); // akcje, dla ktorych wymagamy logowania
  6.  
  7. if (in_array($this_action_name, $must_login)) { // sprawdzenie czy dana akcja jest wymagana
  8. $u = new Zend_Session_Namespace('user');
  9. if (empty($u->id)) { // jesli nie jest zalogowany
  10. $u->back_url = $_SERVER['REQUEST_URI']; // zapisuje aktualnego urla - czyli tego, na ktorego chcialbym sie dostac
  11. $this->_redirect($this->_url->url(array($this->lang_s, 'system', 'login'), 'action_method')); // skok do logowania
  12. }
  13. }
  14.  
  15. parent::preDispatch();
  16. }
  17.  

mozesz zapakowac to w metode, dodac ja do klasy bazowej kontrolera a w akcji tylko wywolywac - bedzie rozsadniej ale idea zostaje taka sama: wskazujesz ktore akcje sa wymagane w ramach danego kontrolera
Psajkus
użyj acl'a
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.