Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 08-05-2010 18:12:08

booradley
Membre
Date d'inscription: 10-01-2009
Messages: 163

Action Helper ActionStack + Redirector

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:

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

 

#2 10-05-2010 11:36:44

booradley
Membre
Date d'inscription: 10-01-2009
Messages: 163

Re: Action Helper ActionStack + Redirector

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

 

#3 10-05-2010 11:53:19

GueloSuperStar
Membre
Lieu: Paris
Date d'inscription: 05-08-2009
Messages: 107

Re: Action Helper ActionStack + Redirector

Pour le actionstack :
- $this->_helper->actionStack('register','membre','membre',$request);

Pour le redirector :
- $this->_helper->Redirector->gotoSimple('index','inscription2','candidat');


A+ Guelo Super Star

Hors ligne

 

#4 10-05-2010 12:47:38

booradley
Membre
Date d'inscription: 10-01-2009
Messages: 163

Re: Action Helper ActionStack + Redirector

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.

Code:

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

 

#5 10-05-2010 21:26:12

booradley
Membre
Date d'inscription: 10-01-2009
Messages: 163

Re: Action Helper ActionStack + Redirector

Toujours pareil,
Le traitement ne s'effectue correctement que si je ne redirige pas après l'actionStack.

Hors ligne

 

#6 11-05-2010 21:46:32

booradley
Membre
Date d'inscription: 10-01-2009
Messages: 163

Re: Action Helper ActionStack + Redirector

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:

Code:

                 
$redirector = $this->_helper->getHelper('Redirector');
$redirector->setExit(false)->gotoSimple('action','controler','module');

David

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