Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour, je suis débutant sur Zend.
j'ai créé un layout assez classique:
"echo $this->partial("header.phtml");
echo $this->layout()->nav;
echo $this->layout()->content;?>
<div id="sidebar"><?php echo $this->layout()->sidebar;?></div>"
Dans mon controleur, j'ai deux actions :
public function indexAction(){
$this->view->headTitle("Tourneur");
$registry = Zend_Registry::getInstance();
$db = $registry->get('db');
$tn = new Tourneur($db);
$select = $tn->select();
$this->view->tourneurs=$tn->fetchAll($select);
$this->render();
$this->render('artistes', 'sidebar');
}
public function artistesAction(){
$idTourneur=$this->_getParam('id', 1);
$tn = new Tourneur();
$touneurRow = $tn->find($idTourneur)->current();
$artistes=$touneurRow->getArtistes();
$this->view->artistes=$artistes;
$this->view->nomTourneur=$touneurRow->Nom;
$this->render();
}
Mon problème se situe dans le $this->render('artistes', 'sidebar');
Je n'ai aucune des variables de artistesAction renseignées.
Je veux donc afficher le résultat de mon artistesAction dans le layout sidebar.
D'avance merci si quelqu'un pouvait m'éclairer.
Hors ligne
La fonction render() rend la vue de l'action, mais n’exécute pas l'action... Sauf erreur de ma part du moins
Hors ligne
C'est exact, la méthode "render()", comme son nom l'indique, va utiliser les variables créées lors de ou des actions exécutées pour réaliser le rendu d'un script. Si ton action n'a pas été exécutée avant, les variables ne seront donc pas accessibles.
Si tu veux, exécuter d'autres actions après l'action principale tu peux soit :
- utiliser la pile d'action (ActionStack) doc
- utiliser l'aide de vue action (plus gourmand en ressource) doc
Hors ligne
Merci. J'ai résolu mon problème avec l'ActionStack.
Hors ligne
Autre chose, si tu veux éviter de récupérer à chaque fois ton adaptateur de bdd, tu peux mettre dans ton bootstrap ces lignes :
[lang=php] $db = Zend_Db::factory(/***/); Zend_Db_Table_Abstract::setDefaultAdapter($db);
Et aussi, la méthode "render()" est appelée automatiquement, tu n'as pas besoin de l'appeler dans ton contrôleur (sauf pour rendre un autre script que celui de l'action en cours).
Hors ligne
Pages: 1