|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre du Club
![]() Inscription : avril 2003 Messages : 117 ![]() |
Bonjour à tous,
voici mon cas : - j'ai plusieurs modules dans mon application et pour chaque j'ai un fichier de langues tmx. ça marche très bien - j'ai une classe qui étend Zend_Controller_Plugin_Abstract avec une méthode predispatch qui va charger le fichier de langue correspondant à mon module (pour éviter de charger tous mes fichiers de langages de tous mes modules) Code :
Je pensais qu'en appelant action, on repassait par le dispatch et donc que mon plugin serait appelé de nouveau pour le module A. est-ce un problème de configuration à mon niveau ou est-ce que forcément, quand on passe par le view helper 'action', le trio module/controller/action demandé ne fera pas appel aux plugins de controller car ils ont déjà été exécuté ? par avance merci |
||
|
|
00
|
|
|
#2 |
![]() ![]() Loïc Développeur Web Inscription : février 2011 Messages : 680 ![]() |
Bonjour,
Comment peux tu être sur que ça ne fonctionne pas ? Peut tu nous fournir un exemple concret ? Les traduction sont identique dans chaque module ? Tu es sur que la première traduction n'est pas appelé et que ça n'écrase pas celle ci ? Je te dis ça car pour ma part la position des modules a son importance, donc possibilité de surcharge et un module est prioritaire par rapport aux autres. |
|
|
00
|
|
|
#3 |
|
Membre du Club
![]() Inscription : avril 2003 Messages : 117 ![]() |
Déjà, merci de t'intéresser à mon cas.
Je sais que cela ne fonctionne pas car j'ai foutu un Zend_Debug::dump à l'intérieur de mon plugin et il ne s'affiche qu'une fois, avec les informations du module "parent". Il n'est pas appelé de nouveau au moment où le view helper 'action' est exécuté. Au départ, je pensais qu'il y avait des flags dans le dispatcher qui empêchait les action plugins d'être exécuté plus d'une fois. Mais en inspectant le fonctionnement du view helper et surtout du dispatcher, on se rend compte qu'il ne repasse pas dans une bouche du predispatch du controller en question. Donc ce que j'en comprend : - un controller plugin n'est exécuté qu'une fois, - le view helper 'action' ne conduit visiblement pas à faire une nouvelle request "complète", on refait que le dispatch du controller en question, les controller plugins ne sont pas appelé de nouveau. est-il possible de changer cela ? par avance merci |
|
|
00
|
|
|
#4 |
|
Membre confirmé
![]() ![]() Lucas CORBEAUXChef de projet MOE Inscription : février 2003 Messages : 159 ![]() |
Intéressant ton cas, qui donne envie de se plonger dans les entrailles du ZF. J'ai jeté un oeil à ce que tu dis, tout ce que je te dirais ici est très théorique car je n'ai pas mon poste de travail sous la main, donc pas pu tester...
Le view helper Action utilise directement le dispatcher : http://framework.zend.com/svn/framew...per/Action.php Alors que si j'en crois le code, c'est le FrontController qui fait se déclencher les plugins : http://framework.zend.com/svn/framew...ller/Front.php Du coup, effectivement l'appel à l'helper Action ne semble pas déclencher les actions des plugins... Quelques trucs qui me viennent, ils te seront peut-être utiles à contourner le problème : - Tu n'as vraiment pas d'autre choix que ce view helper ? L'ActionHelper actionStack() marche peut-être différemment, ou tu peux peut-être utiliser _forward() ? - Utiliser un ActionHelper plutôt qu'un plugin : il est possible (pas vérifié) que le chargement du contrôleur suffise à les charger et appeler leurs méthodes preDispatch(), alors que les plugins sont chargés par le FrontController. - Utiliser un dispatcher maison, qui déclencherait ton plugin, et que tu fournirais au view helper Action en remplacement du dispatcher standard. Honnêtement, je trouve cette solution un brin compliquée... En tout cas si tu résous ton soucis, je serais intéressé par ta solution. |
|
00
|
|
|
#5 |
![]() ![]() Loïc Développeur Web Inscription : février 2011 Messages : 680 ![]() |
En appellant une action tu repasse par le preDispatch du conleur de ton action pas celui de ton plugin.
Tu as la possibilité de créé TOTO_Controller_Action qui étendrait Zend_Controller_Action et dans lequel tu surchargerait la méthode preDispatch en y mettant le chargement de ton fichier langue. Sinon tu surcharge ton helper afin que ce soit lui qui charge tes fichiers. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com