Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 25-02-2008 10:00:27

purr44
Nouveau membre
Date d'inscription: 25-02-2008
Messages: 3

[MVC-Controllerl][Version1.5] Forward

Bonjour,

Je débute avec Zend et j'ai un petit problème. Dans un controleur, j'aimerai appeler une méthode d'un autre controleur. Voici mon code :

Code:

class MusicienController extends Zend_Controller_Action
{
    public function initAction(){
        $this->_forward('deb', 'index',null);    // code html <head>...</head><body>
        $this->render('init');                        // contenu de ma page
        $this->_forward('fin', 'index', null);  // code de fin </body></html>
    }
}

J'essaye donc d'appeler les methodes 'deb' et 'fin' de mon controleur 'index' alors que je suis dans le controleur 'Musicien'. Mais ça ne fonctionne pas, j'obtiens cette erreur :

Code:

Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller specified (error)' in C:\Program Files\ZendFramework-1.5\Zendlibrary\Zend\Controller\Dispatcher\Standard.php:198 Stack trace: #0 
C:\Program Files\ZendFramework-1.5\Zendlibrary\Zend\Controller\Front.php(927): 
Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), 
Object(Zend_Controller_Response_Http)) #1 C:\Program Files\ZendFramework-1.5\Zendlibrary\Zend\Controller\Front.php(223): Zend_Controller_Front->dispatch() #2 
C:\Documents and Settings\antoine\Mes documents\workspace\MusicContact\html\index.php(4): 
Zend_Controller_Front::run('../application/...') #3 {main} thrown in C:\Program 
Files\ZendFramework-1.5\Zendlibrary\Zend\Controller\Dispatcher\Standard.php on line 198

Mais quand j'inverse l'appel des 'forward' ça fonctionne :

Code:

public function initAction(){
        $this->render('init');
        $this->_forward('fin', 'index', null);
        $this->_forward('deb', 'index',null);    
    }

Mais le code de la page générée ne correspond pas à ce que je veux obtenir....quelqu'un à une explication à me donner? ou alors je suis pas assez bon pour le Framework MVC de Zend?

J'avais cru comprendre que l'appel à des 'forward' ajoutait à la réponse html tous les segments de code générés par les différentes méthodes appelées...

Merci,
a+

Hors ligne

 

#2 25-02-2008 14:55:21

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

Re: [MVC-Controllerl][Version1.5] Forward

Par défault le zf inclus un plugin error_handler qui s'il y'a a des erreurs internes (exceptions) appel un ErrorController qui devrait être présent par default. (cherche là: http://framework.zend.com/manual/fr/zen … ugins.html)
C'est pour ça que ton erreur contient : 'Invalid controller specified (error)'
Alors tu peux le créer avec l'action error, mais ça ne résoudra pas ton problème.
Si tu veux voir la vrai erreur il faut spécifié à ton front controller de remonter les exceptions pour que tu puisse la voir: $frontConttroller->throwExceptions(true) qui n'est pas activé par default (puisqu'il y'a la le plugin de gestion d'erreurs).

Hors ligne

 

#3 25-02-2008 16:00:42

purr44
Nouveau membre
Date d'inscription: 25-02-2008
Messages: 3

Re: [MVC-Controllerl][Version1.5] Forward

ok, merci pour la réponse...mais ca ne marche toujours pas. Voici maintenant le code que je tape :

Code:

class MusicienController extends Zend_Controller_Action
{
    
    public function initAction(){
        //
        $this->_forward('deb', 'index',null);    //la vue contient <html><head></head><body>
        $this->render();                              // doit afficher "bonjour"
        $this->_forward('fin', 'index', null);   //la vue contient  </body></html>
        
        
    }
}

la page retournée contient bien le code html de 'deb' et de 'fin' mais pas le code "bonjour" de la méthode 'init'...donc $this->render() ne renvoie rien, ne fonctionne pas?

et je n'ai plus de message d'erreur...

Bon, je dois pas avoir tout compris...mais entre le pre dispatch, post dispatch, le request....je suis un peu paumé ....smile

merci si vous avez une idée/réponse,
a+

Hors ligne

 

#4 25-02-2008 16:10:36

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

Re: [MVC-Controllerl][Version1.5] Forward

Je ne pense pas que l'utilisation de _forward() soit  une bonne idée pour la gestion du header/footer.
Regarde du côté de Zend_Layout  ou encore des plugins.

Hors ligne

 

#5 25-02-2008 23:18:36

purr44
Nouveau membre
Date d'inscription: 25-02-2008
Messages: 3

Re: [MVC-Controllerl][Version1.5] Forward

merci, j'avais noté qu'il y avait mieux pour gérer les header et footer smile

Mais si on ne se focalise pas sur le contenu des méthodes 'deb' et 'fin', comment on fait pour recomposer une page html à partir de plusieurs méthodes de plusieurs controler?

a+

Hors ligne

 

#6 26-02-2008 00:10:43

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

Re: [MVC-Controllerl][Version1.5] Forward

Zend_Layout comme j'ai dis plus haut. Dispo dans la version 1.5 (en preview non stable).
Je te conseille de voir sur le SVN du zf ou de prendre la dernière snapshot.

Hors ligne

 

#7 26-02-2008 11:26:02

Julien
Membre
Date d'inscription: 16-03-2007
Messages: 501

Re: [MVC-Controllerl][Version1.5] Forward

Oui appeler deux fois _forward de suite n'a pas de sens logique.
_forward() ne fait que modifier la requête pour le prochain jeton de dispatching, il n'execute pas la requête directement.

Donc un appel à _forward('foo');
Puis plus bas dans la même action _forward('bar'); va écraser l'appel précédent.
Ce n'est qu'en fin d'action que la requête est redispatchée avec un nouveau jeton.

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