Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Je me sens ridicule à poser cette question mais je n'ai pas trouvé d'exemple concret.
Je cherche à générer une page en plusieurs blocs.
Chaque action de mon controlleur est censé construire son bloc et le rendre dans son propre segment de réponse.
Il s'agit d'afficher la fiche d'un candidat (controlleur fiche, module candidat).
Voici le controlleur:
class Candidat_FicheController extends Zend_Controller_Action { public function indexAction() { $this->_helper->actionStack('actions', 'fiche', 'candidat'); $this->_helper->actionStack('presentation', 'fiche', 'candidat'); //$this->render('index'); //$this->render('actions','action_container'); } public function actionsAction() { $this->_helper->viewRenderer->setResponseSegment('actions_container'); //$this->getResponse()->insert('action_container', $this->view->render('actions.phtml')); //$this->render('actions','action_container'); } public function presentationAction() { $this->_helper->viewRenderer->setResponseSegment('presentation_container'); } } ?>
Et voici ma vue index.phtml:
<?php echo $this->layout()->action_container; ?> <?php echo $this->layout()->presentation_container; ?>
Les 2 vues actions.phtml et presentations.phtml contiennent pour le moment "titi" et "toto".
Or lorsque j'apelle /candidat/fiche/index, rien ne s'affiche.
Je ne comprends pas comment faire j'ai l'impression que l'on ne peut agir que sur les segments du layout et qu'on ne peut pas gérer de segments dans la vue .
Est ce que je me trompe? Avez vous une solution à ce problème qui me semble tout de même assez classique ?
David
Hors ligne
regarde l'aide de vue $this->action()
Hors ligne
J'ai fait le choix personnel de refuser d'utiliser ces Action Views Helpers car dans ce cas c'est la vue qui fait appel au controller (MVC Pull) et non l'inverse.
Y'a pas un moyen en PUSH ?
David
Dernière modification par booradley (02-05-2010 16:11:21)
Hors ligne
En utilisant les actionStack , viewRenderer et les segments de réponse, y'a pas moyens de rendre un segment dans une vue et non un layout ?
Hors ligne
Il semble que ce ne soit pas la solution la plus évidente donc je vais utiliser les action view helpers ce qui me permettra de d'avoir une plus grande indépendance entre les controlleurs.
.
Hors ligne
les vues sont appelées dans les actions, ici tu indique à ta vue qu'il faut afficher le rendue d'une autre action. Côté MVC c'est vrai que c'est pas joli mais côté choix de l'endroit où appeler ton autre action, il y a pas mieux.
Hors ligne
Ouais ca me plait pas énormément mais bon ca a le mérite d'encourager le découplage à fond.
De plus ca reste parfaitement MVC puisque c'est la vue qui dialogue avec différents controlleur.
Par exemple voici ce que devient l'action de ma page d'accueil:
class IndexController extends Zend_Controller_Action { public function indexAction() { // Que dalle! } }
Et la vue associée:
<?php $this->action('index', 'home-selection', 'candidat'); ?> <?php $this->action('formulaire', 'inscription', 'membre'); ?> <?php $this->action('index', 'annonces-du-jour', 'candidat'); ?> <?php $this->action('index', 'derniers-temoignages', 'temoignage'); ?>
Ca multiplie de nombre de controlleurs/vues mais ca réduit chaque action à un traitement minimum.
Et les controlleurs/actions appelés via l'url ont tendance a devenir de simples containers vides.
Je pensais gérer ce découplage via le controlleur principal via des actionStack mais comme je n'arrive pas le faire, je pense que je vais garder cette solution d'action view helpers qui permet un tres bon découplage.
Je constate actuellement un ralentissement de l'application mais je suis pas encore certain que cela vienne de ca.
Dernière modification par booradley (04-05-2010 10:19:36)
Hors ligne
Pages: 1