Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour à tous,
je viens de passer du temps sur un problème assez assez étrange :
Soit le code :
class IndexController extends My_Control_Action { public function indexAction() { if( CONDITION ) { $this->_helper->viewRenderer->setNoRender(); $this->_forward('autreIndex'); } } public function autreIndexAction() { echo 'forward vers l'action : '; echo $this->_request->action; } }
Avec ça on s'attend a récuperer le nom de l'action autreIndex, et pourtant c'est index qui sort. Je n'ai pas réussi à trouver d'ou venait la valeur 'index' ! ( même dans le debugger la valeur de _request->_action était la bonne )
En revanche, si on utilise $this->_request->getActionName(); là le nom correct de l'action sort.
Donc tout fonctionne mais si quelqu'un a une idée sur d'où vient la variable action et de la différence avec getActionName, ça m'interresse :]
Je n'ai pas réussi à trouver de la doc la dessus.
En attendant ça peut aider quelqu'un qui auait eu le même problème que moi.
Dernière modification par slyfog (22-02-2008 15:58:16)
Hors ligne
normal le forward est juste un enchainement d'appel de fonction c'est donc bien l'action Index qui à été invoqué
si tu veux faire une transition il te faut utiliser _redirect
class IndexController extends My_Control_Action { public function indexAction() { if( CONDITION ) { $this->_helper->viewRenderer->setNoRender(); $this->_redirect('autreIndex'); } } public function autreIndexAction() { echo 'forward vers l'action : '; echo $this->_request->action; } }
Hors ligne
En effet le redirect fonctionne bien aussi pour faire ça, mais appelle la nouvelle url, dans mon cas j'avais besoin de rester sur la même url.
Hors ligne
oui c'est soit l'un soit l'autre
soit tu reste sur la même action est $this->_resquest->action te donne toujours celle-ci
soit tu re-dirige et tu change d'action et $this->_request->action suis aussi.
si tu veux connaître le nom de ma méthode dans laquelle tu exécute un bout de code il te faut en passer par l'introspection ou par la pile d'exécution.
A+JYT
Hors ligne