Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Les view helpers d'action n'existent plus
index.phtml:
Code:
//echo $this->action('guest','index','application');
$action = $this->plugin('action',array('guest','index','application'));
echo $action;
Message: Class Zend\View\Helper\Action does not exist
Je viens de lire une contribution disant que Matthiew préconise d'utiliser un _forward dans le controller et de rendre le résultat dans la vue.
http://zend-framework-community.634137. … 88353.html
J'aime pas du tout car j'ai l'impression de rajouter du couplage dans le code mais bon, s'il y a pas le choix...
J'imagine qu'il y a une bonne raison a cela.
Hors ligne
J'ai eu confirmation de jurians sur l'IRC.
Le plus simple est de remplacer les view helpers d'action par le plugin forward.
Voici comment l'utiliser:
http://packages.zendframework.com/docs/ … ns.forward
Hors ligne
Mais maintenant ce qui craint c'est que lorsqu'on récupère le code html généré par ce dispatch(), on a aussi le layout intégré dedans.
$derniersTemoignages = $this->forward()->dispatch('temoignage-temoignage', array('action' => 'liste'));
Mais pour le moment la désactivation du layout (ni de la vue d'ailleurs) ne sont pas encore implémentés dans zf2.
Dernière modification par booradley (29-11-2011 19:19:44)
Hors ligne
T'as sûrement moyen de la jouer hardcore en lançant un évènement que tu interceptes dans le ViewListener et ou tu désactives le rendu du layout :vrai_mec: .
Hors ligne
oui il m'a dit de créer un autre listener qu'on appelle avant Listener.php et dans lequel on peut le faire.
Bien que j'ai rien pané a son charabia, j'ai fait "Good Idea man !"
Bref je vais essayer de rentrer un peu dans le code car le Listener et les Events c'est encore plus mystérieux que le container de DI ! lol
Je vais m'y mettre.
Mais déjà il faut que je trouve la méthode qui permet de désactiver ce layout.
++
Dernière modification par booradley (30-11-2011 13:17:40)
Hors ligne
J'ai modifié la méthode renderLayout() du Listener.php:
$layout = $this->view->render($this->layout, $vars); if($this->view->layout()->isEnabled()) { $response->setContent($layout); } else { $response->setContent($vars['content']); }
Mais ca métonnerait bcp que la solution soit aussi simple lol
Bref ca fonctionne dans une action simple.
$this->getLocator()->get('view')->layout()->disableLayout();
Mais dès qu'on inclue des plugins forward à l'action courante qui font appel à des actions sans layout, le layout global est aussi désactivé.
$monbloc = $this->forward()->dispatch('moncontroller', array('action' => 'uneactionsanslayout')); // => désactive le layout global
Hors ligne
J'ai remonté ce bug a Matthew:
http://framework.zend.com/issues/browse/ZF2-111
Il dit que personne n'avait encore testé ce truc là lol
Hors ligne
Tant mieux, faut continuer à remonter des bugs comme ça ;-).
Hors ligne
Oui les mecs c'est des tueurs, ils sont a fond sur l'architecture, les design patterns, l'abstraction mais j'ai l'impression que ca les amuse pas tous de tester des trucs basiques et de faire du debug.
En tant que développeur c'est vrai que les tests et le debug c'est pas le plus marrant.
C'est aux utilisateurs aussi de le faire sur les beta.
Dernière modification par booradley (06-12-2011 17:22:05)
Hors ligne
Héhé, c'est clair que je suis chaque fois impressionné quand je lis le code (pas que de Zend hein), comment c'est architecturé, pensé... on apprend beaucoup à lire leur code source ;-).
Hors ligne