Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 27-12-2007 19:08:35

Dinous
Nouveau membre
Lieu: LYON
Date d'inscription: 13-12-2007
Messages: 3

Problème avec _forward() ... ça marche mais pas vraiement en fait

Bonjour,

j'ai ce code :

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 ! smile

Hors ligne

 

#2 28-12-2007 09:31:59

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: Problème avec _forward() ... ça marche mais pas vraiement en fait

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

 

#3 07-01-2008 09:55:01

Dinous
Nouveau membre
Lieu: LYON
Date d'inscription: 13-12-2007
Messages: 3

Re: Problème avec _forward() ... ça marche mais pas vraiement en fait

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

 

#4 08-01-2008 15:27:56

ichevc02
Membre
Date d'inscription: 25-07-2007
Messages: 127

Re: Problème avec _forward() ... ça marche mais pas vraiement en fait

Bonjour,

si tu veux voir par qu'elle actions tu passes et leur parametre  :

Code:

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

 

#5 28-01-2008 01:44:32

ALkyD
Membre
Lieu: Limoges
Date d'inscription: 11-07-2007
Messages: 69
Site web

Re: Problème avec _forward() ... ça marche mais pas vraiement en fait

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 wink

Dernière modification par ALkyD (28-01-2008 01:45:47)

Hors ligne

 

#6 28-01-2008 08:26:04

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: Problème avec _forward() ... ça marche mais pas vraiement en fait

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

Code:

$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 smile


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#7 28-01-2008 09:14:57

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: Problème avec _forward() ... ça marche mais pas vraiement en fait

Après un _forward, je crois que ça aide d'utiliser exit(); comme ça ca zappe la suite de l'action.

Hors ligne

 

#8 28-01-2008 09:53:46

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: Problème avec _forward() ... ça marche mais pas vraiement en fait

pas très bon ça de couper l'herbe sous le pied

Code:

         $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

 

#9 28-01-2008 10:12:15

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: Problème avec _forward() ... ça marche mais pas vraiement en fait

Okay okay.
Sinon y'a plus court pour mettre le noRender wink
Dans un controller

Code:

$this->_helper->viewRenderer->setNoRender();

Hors ligne

 

#10 28-01-2008 13:47:48

ALkyD
Membre
Lieu: Limoges
Date d'inscription: 11-07-2007
Messages: 69
Site web

Re: Problème avec _forward() ... ça marche mais pas vraiement en fait

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

 

#11 28-01-2008 14:19:59

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: Problème avec _forward() ... ça marche mais pas vraiement en fait

Humm... En tout cas sache que $this->_helper->viewRenderer->setNoRender(); à toujours bien marcher avec moi.

Hors ligne

 

#12 28-01-2008 16:08:37

ALkyD
Membre
Lieu: Limoges
Date d'inscription: 11-07-2007
Messages: 69
Site web

Re: Problème avec _forward() ... ça marche mais pas vraiement en fait

J'ai finalement trouvé la bonne méthode, un poil différente de celle de sekaijin :

Code:

$this->_helper->redirector->gotoAndExit('action', 'controller', 'module');

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages