Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Je voudrais qu'un menu sur le coté de mon site (donc, avec une code html qui ne change jamais)
est un contenu différent en fonction du module/controller/action utilisé (j'ai une structure modulaire).
J'ai donc essayé actionStack :
// dans un module X public function init() { //$this->_helper->actionStack('sidebar', 'Index', 'default', array('menu' => $this->getMenu())); } protected function getMenu() { $menu = array(); $menu["/domain"] = "Index"; $menu["/domain/test"] = "test"; return ($menu); }
Le problème est que le code rentre dans une boucle infinie...
pourquoi ?
Merci
Dernière modification par nORKy (10-03-2008 16:06:10)
Hors ligne
Quand tu appelles totoAction (par ex) dans IndexController, tu passes par la méthode init() où tu ajoutes à la pile sidebarAction()
Une fois totoAction() réalisée, sidebarAction() est éxécutée donc ton (re)passe par la méthode init() de IndexController
Donc boucle infini...
Hors ligne
Ton raisonnement est bon, mais ca ne devrait pas être le cas.
Le code que je présente viens du module 'domain', controller 'config' et action 'index'.
Et tu peux voir que mon actionStack rajoute une requete puor le module 'default', controlelr 'Index' et action 'sidebar'.
Dernière modification par nORKy (10-03-2008 14:53:46)
Hors ligne
Je viens de faire un modification simple :
// dans un module X public function init() { static $i = 0; if ($i == 0) { $this->_helper->actionStack('sidebar', 'Index', 'default', array('menu' => $this->getMenu())); } } protected function getMenu() { $menu = array(); $menu["/domain"] = "Index"; $menu["/domain/test"] = "test"; return ($menu); }
Avec ca, plus de boucle infini, mais l'action demander est executer 2 fois ! (mon segment content est affiché en double) et la nouvelle action je demande n'est pas exécuter du tout.
Ce qui veut dire que $this->_helper->actionStack('sidebar', 'Index', 'default', array('menu' => $this->getMenu())) push de mauvaise information ??
Qu'en pensez vous ?
Dernière modification par nORKy (10-03-2008 15:54:37)
Hors ligne
Je me réponds à moi-meme !!!
A force de poser des code de debug dans le framework, je suis remonté jusqu'a mon plugin Auth !!
Le code de ce plugin pourtant 'connu'
voici l'original :
if (!$this->_acl->isAllowed($role, $resource, $action)) { if (!$this->_auth->hasIdentity()) { $module = $this->_noauth['module']; $controller = $this->_noauth['controller']; $action = $this->_noauth['action']; } else { $module = $this->_noacl['module']; $controller = $this->_noacl['controller']; $action = $this->_noacl['action']; } } $request->setModuleName(zz$module); $request->setControllerName($controller); $request->setActionName($action);
ET maintenant :
if (!$this->_acl->isAllowed($role, $resource, $action)) { if (!$this->_auth->hasIdentity()) { $request->setModuleName($this->_noauth['module']); $request->setControllerName($this->_noauth['controller']); $request->setActionName($this->_noauth['action']); } else { $request->setModuleName($this->_noacl['module']); $request->setControllerName($this->_noacl['controller']); $request->setActionName($this->_noacl['action']); } }
Le Predispatch modifiait la route !
Résolu donc !!!
Hors ligne