Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Suite à la validation d'un formulaire, j'ai besoin de faire plusieurs actions dans des modules/controlleurs différents.
Bien que je n'ai pas trouvé d'exemples concrets, j'ai l'impression que je dois utiliser le helper ActionStack.
D'ailleurs je ne vois pas trop la différence avec le _forward mais bon...
Donc voici mon code:
class Membre_InscriptionController extends Zend_Controller_Action { public function indexAction() { $form = new Membre_Form_RegistrationForm(); $form->setAttrib("action","/membre/inscription"); $request = $this->_request; if ($request->isPost()) { $formData = $request->getPost(); if ($form->isValid($formData)) { if(!$form->isErrors()) { $request = clone $this->getRequest(); $request->setActionName('register')->setControllerName('membre')->setModuleName('membre'); $this->_helper->actionStack($request); $redirector = $this->_helper->getHelper('Redirector'); //$redirector->gotoSimple('index','inscription2','candidat'); } } $form->populate($formData); } $this->view->formulaire = $form->__toString(); } }
L'actionStack fait appel à une action qui enregistre un utilisateur.
Lorsque cet enregistrement est réalisé, je redirige (gotoSimple) vers une autre page.
Or mon problème se situe ici.
Le redirector semble empecher l'appel à l'actionStack.
Car si je met la redirection en commentaire, l'actionStack effectue bien son boulot.
Dans un premier temps j'ai pensé à un traitement asynchrone ou qu'un thread différent était lancé par l'actionStack.
Ensuite j'ai lu quelque part que l'actionStack était lancé en postDispatch. Ce qui signifierait que la redirection generait le postDispatch? Qu'on ne pourrait jamais faire de redirection apres des appels a des actionStack ?
Pouvez vous me donner votre avis sur ce problème et si l'actionStack est bien approprié dans mon cas ou un _forward ou autre serait mieux.
David
Hors ligne
Bonjour,
Je vais poser ma question différemment.
Est ce que quelqu'un utilise l'actionstack de cette maniere?
Est ce qu'une redirection est possible apres l'appel d'un actionStack ?
David
Hors ligne
Pour le actionstack :
- $this->_helper->actionStack('register','membre','membre',$request);
Pour le redirector :
- $this->_helper->Redirector->gotoSimple('index','inscription2','candidat');
Hors ligne
Ca a l'air d'être la même chose que ce que je fais.
Je vais tester ce soir.
En tout cas merci pour ton point de vue.
Pour info, voici le code du controller appelé via l'actionStack.
class Membre_MembreController extends Zend_Controller_Action { public function registerAction() { // Désactivation du rendu de la vue $this->_helper->viewRenderer->setNoRender(true); $request = $this->_request; $id_sexe = $request->getPost("id_sexe"); $password = $request->getPost("password"); $membre = new Model_TMembre(); $membre->id_sexe = $id_sexe; $membre->pwdcrypte = new Doctrine_Expression("AES_ENCRYPT('".htmlspecialchars($password,ENT_QUOTES)."','"._MYSQL_CRYPT."')"); $membre->save(); $membre_id = $membre->id; /* $this->_helper->actionStack('create', 'localisation', 'membre', array( 'membre_id' => $membre_id )); $request = clone $this->getRequest(); $request->setActionName('register')->setControllerName('candidat')->setModuleName('candidat'); $request->setParam('membre_id', $membre_id); $this->_helper->actionStack($request); */ } }
Dernière modification par booradley (10-05-2010 12:51:40)
Hors ligne
Toujours pareil,
Le traitement ne s'effectue correctement que si je ne redirige pas après l'actionStack.
Hors ligne
Je viens de trouver la solution.
Le problème était lié à la redirection et non à l'actionStack.
Il semble que toute redirection apres l'appel à un action stack doit etre effectuée en appelant la méthode setExit(false), de cette manière:
$redirector = $this->_helper->getHelper('Redirector'); $redirector->setExit(false)->gotoSimple('action','controler','module');
David
Hors ligne