Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Voila mon problème.
J'utilise :
$this->action($action, $controller, $module = null, array $params = array())
exemple :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> [...] </head> <body> <?php echo $this->flashMessenger(); ?> <?php echo $this->action('header', 'index', 'admin'); ?> <div class="middle"> <?php echo $this->layout()->content ?> </div> <?php echo $this->action('footer', 'index', 'admin'); ?> </body> </html>
Ce qui marche bien.
Mais je suis en train de créer une fonctionnalité de plus, et pour cela j'ai besoin de récupérer les actions appelés lors du dispatch.
J'ai donc créer un plugin, mais je n'arrive à récupérer que l'action principale. Je n'arrive pas à mettre la main sur mes actions appelé par mon helper de vue 'action'.
Exemple :
Je vais sur monsite.com/admin/index/index :
J'aimerais pouvoir récuperer :
admin - index - index
admin - index - header
admin - index - footer
Mon probleme est que je ne recupere que :
admin - index - index
Mon plugin :
<?php class MaBoite_Controller_Plugin_Monplugin extends Zend_Controller_Plugin_Abstract { public function preDispatch(Zend_Controller_Request_Abstract $request) { Zend_Registry::get('logger')->debug("ICI:".$request->getActionName()); // je ne récupere que index - index } }
Alors je ne suis pas encore bien en harmonie avec le systeme ZF, mais il me semble que je devrais récuperer aussi mon header et footer, puisque dans Zend_View_Helper_Action::action() il y a bien un :
$this->dispatcher->dispatch($this->request, $this->response);
Ou est mon erreur ? Comment puis-je faire ? (Puis-je le faire ?)
Hors ligne
$request représente la requête demandé, si tu veux obtenir la pile d'action tu dois t'adresser au Zend_Controller_Plugin_ActionStack.
Par contre, comme le layout effectue le rendu en postDispatch, tu dois soit ajouter ton plugin après celui du layout et en postDispatch() ou simplement en dispatchLoopShutDown(), car sinon t'es action ne sont tout simplement pas ajoutées dans la pile.
http://www.kitpages.fr/cms/site/tutoria … lobale.jpg
Dernière modification par 3uclide (26-02-2009 18:10:59)
Hors ligne
Exact, c'est ennuyant, j'en ai besoin avant le dispatch pour bien...
Pour etre plus clair, voici ce que je veux faire :
Ca concerne Zend_Translate. J'aimerais avoir un fichier de traduction par action (par souci de perf mais surtout pour permettre une traduction plus souple : j'aimerais que la traduction d'une meme clé ne soit pas forcement la meme d'une page a une autre...)
Du coup ce que je voulais, c'est charger le fichier de traduction qui correspond a l'action appelé (ainsi que de gerer les traductions directement en back office, mais ca c'est autre chose). Bref, je suis sur un os la...
Hors ligne
Tu peux faire cela dans la méthode init() du contrôleur puisqu'à la construction du contrôle l'objet requête est passée ou même un aide d'action en preDispatch()
Dernière modification par 3uclide (27-02-2009 19:09:31)
Hors ligne