Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
j'ai ce code :
[...] function retrouverAction(){ $this->view->setTitle("Mot de passe perdu ?"); $this->view->action = $this->view->filAriane.'invite/index/envoieconfirmemdp'; $this->view->btAction = Array('name' =>'envoiFrmMdp','valeur'=>'Procédure de récupération de mot de passe'); } function envoieconfirmemdpAction(){ $(...) $this->_forward("retrouver", "index", "invite"); }
Quand je vais sur http://monsite/invite/index/retrouver
j'ai biensûr retrouverAction qui se lance et le résultat est affiché sur retrouver.phtml => tout est normal
par contre lorsque je valide mon formulaire qui a pour action "invite/index/envoieconfirmemdp"
mon action envoieconfirmemdp s'exécute parfaitement, puis je me retrouver sur retrouver.phtml mais tout ce qui est fait dans retrouverAction ne s'execute pas :s du cou je remet mes 3 lignes dans mon "envoieconfirmemdpAction" ce qui est bien mais pas top et surtout trés moche :s
Auriez vous une idée ?
Merci et joyeuses fêtes !
Hors ligne
C'est étrange. As tu simplement tenté de mettre quelques echos entre les lignes? Histoire de voir...
Ton retrouverAction() n'a elle pas besoin de paramètres ? Car _forward() ne les fait pas suivre si tu ne les spécifie pas dans un tableau en 4ième paramètres (il me semble)...
Hors ligne
Le echo fonctionne mais je pense que le problème vient d'ailleur.
Quand je fais mon forward il mapp bien la bonne vue, le bon controlleur et le bon module mais j'ai l'impression que le $this->view est en lecture seule ou du moins n'est pas le même que celui qui est affiché.
Ce fonctionnement est plutôt en accord avec le fait que si on regarde dans la barre d'adresse on aura pas :
http://monsite/module/controlleur/retrouver...
mais :
http://monsite/module/controlleur/envoieconfirmemdp...
Enfin je creuserai plus ce soir.
Hors ligne
Bonjour,
si tu veux voir par qu'elle actions tu passes et leur parametre :
function preDispatch(){ Zend_Registry::get('logger')->log("Dans le Predispatch avec module : ".$this->_request->getModuleName().' controlleur : '.$this->_request->getControllerName().' action : '.$this->_request->getActionName().' parameres'.$this->_request->getParams(), Zend_Log::DEBUG); return ; }
où logger est ton Zend_Log.
autre idée, fait bien un return après ton _forward() si tu veux "forwarder" imediatement
Hors ligne
Bonjour, j'ai aussi un problème avec _forward. J'ai un controller AdminController avec les méthodes indexAction() et loginAction(). Dans indexAction(), je vérifie si l'utilisateur est authentifié, et si ce n'est pas le cas, je redirige vers la méthode loginAction() avec _forward().
Le problème est que ZF effectue d'abord le rendu de index.phtml puis de login.phtml... Ce que je cherche à faire est simplement de redigirer vers loginAction() et d'effectuer uniquement le rendu de login.phtml (et donc d'annuler la suite des traitements concernant indexAction() )...
J'ai regardé du côté de $this->_redirect() mais ça m'a pas l'air très propre (on est obligé de former l'URL de redirection au lieu de simplement passer en argument l'action et le controlleur) et ce n'est pas transparent (on voit le changement d'URL dans la barre d'adresses du navigateur)...
Y'a-t-il une autre solution ?
merci
Dernière modification par ALkyD (28-01-2008 01:45:47)
Hors ligne
Bonjour,
Pour ne pas afficher automatiquement la vue, il faut désactiver le viewRenderer.
Dans ta première action (avant le _formward), il faut faire un
$this->setNoRenderer(true);
A+, Philippe
PS : vérifie la syntaxe, il faudra peut-être ajouter un $this->render dans la 2e action... je n'utilise pas le viewRenderer, je ne suis pas hyper à l'aise avec les détails d'utilisation
Hors ligne
pas très bon ça de couper l'herbe sous le pied
$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer'); $viewRenderer->setNoRender(true);
est bien sufisant
attention à la différence entre _forward qui enchaîne sur l'action suivante dans le même appel
Appel client -> action 1 -> action 2 -> réponse
avec le redirect qui luii génère un deuxième appel
Appel client -> action 1-> redirect reponse -> appel client -> action 2 -> reponse
dans ce deuxième cas il il existe deux façon de faire le redirect soit en terminant l'action jusqu'au bout (post dispatch etc.) soit en arrêtant le processus après le redirect.
$this->_helper->redirector->gotoUrlAndExit($url, $options);
A+JYT
Hors ligne
J'ai essayé de désactiver le viewRenderer avec " $this->_helper->viewRenderer->setNoRender(); " mais ça n'a pas l'air de faire grand chose, puisquee j'ai toujours deux pages qui s'affichent l'une après l'autre (index.phtml puis login.phtml)...
Je pense que je vais plutôt utiliser la méthode gotoUrlAndExit(), ça m'a l'air le mieux...
Hors ligne
J'ai finalement trouvé la bonne méthode, un poil différente de celle de sekaijin :
$this->_helper->redirector->gotoAndExit('action', 'controller', 'module');
Hors ligne
Pages: 1