Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 01-05-2009 14:21:46

oucelavatil
Membre
Date d'inscription: 27-01-2009
Messages: 14

[Zend_Controller][Résolu] "forward" et modules

Bonjour à tous,

je suis en train de terminer le back-office de mon site, l'ensemble est basé sur Zend et ce back-office est conçu comme un module "admin".

J'ai besoin d'un "forward" pour gérer deux sections en même temps sur la même page. Pour faire simple, j'ai :
- colonne de gauche, les caractéristiques d'une galerie
- colonne de droite, la liste des images de cette galerie.

Mon problème :
Dès que j'appelle un forward depuis n'importe quel controleur de mon module "admin", Zend lève une exception parce qu'il ne trouve pas le fichier de layout de l'espace d'admin.

Code:

$this->_forward("monactiontest","moncontroleur","admin"); // action / controleur / module

Code:

exception 'Zend_View_Exception' with message 'script 'admin.phtml' not found in path (
D:\_www\smz\application\admin\admin\views\layouts\;
D:\_www\smz\application\views\scripts\;D:\_www\smz\application\admin\views\scripts\)' in 
D:\_www\phplib\ZendFramework\library\Zend\View\Abstract.php:857

Je vois dans le premier chemin qu'il y a deux fois le dossier "admin" ; pourquoi le forward va-t-il chercher un script de layout dans un nouveau dossier au nom du module, alors que je ne change pas de module ?

J'ai essayé plusieurs choses, mais j'obtiens toujours la même erreur :
- un forward sur une action du même controleur
- un forward vers une action qui existe / qui n'existe pas
- sans préciser le nom du module
- sans préciser le nom du controleur : $this->_forward("monactiontest");

Est-ce quelqu'un aurait une petite idée sur la façon de gérer les forwards sur une application avec plusieurs modules ?

Merci !!

N.

Dernière modification par oucelavatil (04-05-2009 12:48:38)

Hors ligne

 

#2 01-05-2009 14:37:29

oucelavatil
Membre
Date d'inscription: 27-01-2009
Messages: 14

Re: [Zend_Controller][Résolu] "forward" et modules

Arf.

En écrivant, je me suis rendu compte que le plugin qui gère le choix du layout selon le module devait être à l'origine de ça. C'est bien le cas... Donc l'exception n'est plus levée, mais mon forward ne fonctionne toujours pas : même en restant au plus basique, un forward sur une action du contrôleur courant, j'obtiens invariablement une erreur 404.

Code:

$this->_forward("monactiontest", "moncontroleur", "admin");
// ou encore :
$this->_forward("monactiontest");

Par contre, mes forwards fonctionnent tous très bien quand je suis dans mon module par défaut.

Un indice ?

smile

Hors ligne

 

#3 01-05-2009 15:17:37

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

Re: [Zend_Controller][Résolu] "forward" et modules

dans ce cas je déconseille d'utiliser un forward mais plutôt un redirect
le forward va avec l'url invoqué au départ et donc dans le contexte de départ (url invoquée) exécuter l'action désignée par le forward en gros si tu fais
http://server/controler1/action1
ZF défini un contexte correspondant à cette action soit donc des chemins pour le contrôleur et la vue
correspondant default/controller1/action1 ce qui donne une vue dans default/views/
l'invocation d'un forward dans l'action va permettre d'éxécuter une autre méthode (du même ou d'un autre contrôleur)
mais il ne changera pas le contexte c'est pratiquement comme un appel de fonction avec en plus le changement du fichier de la vue mais pas les chemins sauf à utiliser les layaout auquel cas il est possible dans le forward de spécifier le nouveau layout

avec un redirect tu termine l'action en envoyant au client un ordre de redirection. ce lui-ci se connectant alors sous la nouvelle url.
http://server/admin/controler2/action2
ton action deux s'exécute donc dans son propre contexte. la première chose que tu y gagne c'est que ton action2 n'est jamais invoqué par une autre url que celle pour laquelle tu l'as défini. tu sépare donc bien le module admin du reste.
cela a un petit revers c'est que les informations que tu avais dans action1 sont perdues. si tu dois passer des données entre action1 et action2 il faut soit les mettre dans les params du redirect soit les mettre en session.

dans un même contrôleur (à la rigueur dans un même module) le forward est intéressant mais pour passer d'un module à l'autre je conseille le redirect

A+JYT

Hors ligne

 

#4 04-05-2009 09:56:51

oucelavatil
Membre
Date d'inscription: 27-01-2009
Messages: 14

Re: [Zend_Controller][Résolu] "forward" et modules

Salut Sekaijin,

merci pour ta réponse ; cependant dans mon cas il ne s'agit pas de changer de module, tout le déroulé de mes deux actions (avant et après le forward) reste bien dans le module d'admin :
Pour le principe, la première partie de l'action affiche les caractéristiques générales d'un logement sur la colonne de gauche, et la liste de ses images sur la colonne de droite.
Les caractéristiques générales et les images étant gérées par deux contrôleurs différents dans ce même module, je ne vois pas d'autre solution - pour le moment - que de faire fonctionner ce forward pour arriver au résultat que j'attends...

C'est probablement un problème de routage qui fait que les choses se perdent, mais je n'arrive pas à l'isoler, et mes "forward" - même en restant dans le même contrôleur - me renvoient toujours à une erreur 404...

N.

Hors ligne

 

#5 04-05-2009 12:48:14

oucelavatil
Membre
Date d'inscription: 27-01-2009
Messages: 14

Re: [Zend_Controller][Résolu] "forward" et modules

Bon, eh bien voilà, j'ai honte.

Je suis parti sur une autre solution, vu que je n'arrivai pas à résoudre mon problème. Et en repassant par ce contrôleur : tiens, étrange, pourquoi cette "machinAction" est déclarée "private" ? ...

D'où les erreurs 404. J'étais tellement occupé à chercher d'autres causes que j'ai oublié la base.

En tous cas merci pour votre aide !

wink

N.

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