38 votes

Envoyer des variables à la mise en page dans le Zend Framework

Dans mon projet j'ai un certain nombre d'éléments dynamiques qui sont uniformément sur chaque page. J'ai mis dans ma mise en page.phtml

Ma question est: Comment puis-je envoyer des variables dans ma mise en page de mon contrôleurs?

Si je veux envoyer des choses de mon contrôleur, je peux utiliser:

$this->view->whatever = "foo";

Et recevez-le dans la vue avec

echo $this->whatever;

Je ne peux pas comprendre comment faire la même chose avec ma mise en page. Peut-être il ya une meilleure façon de contourner le problème?

46voto

Tim Fountain Points 21921

La mise en page est un point de vue, si la méthode de l'affectation des variables est la même. Dans votre exemple, si vous étiez à echo $this->que ce soit dans votre mise en page, vous devriez voir la même sortie.

Un problème commun est la façon d'attribuer les variables que vous utilisez sur chaque page de votre mise en page, que vous ne voulez pas avoir à dupliquer le code dans chaque contrôleur de l'action. Une solution à ce problème est de créer un plugin qui attribue ces données avant la mise en page est rendue. E. g.:

<?php

class My_Layout_Plugin extends Zend_Controller_Plugin_Abstract
{
   public function preDispatch(Zend_Controller_Request_Abstract $request)
   {
      $layout = Zend_Layout::getMvcInstance();
      $view = $layout->getView();

      $view->whatever = 'foo';
   }
}

enregistrez ensuite ce plugin avec le contrôleur frontal, par exemple

Zend_Controller_Front::getInstance()->registerPlugin(new My_Layout_Plugin());

43voto

10us Points 480

Sans l'aide des aides ou des plugins n' :

Zend_Layout::getMvcInstance()->assign('whatever', 'foo');

Après cela, vous pouvez utiliser les éléments suivants à votre disposition:

<?php echo $this->layout()->whatever; ?>

Cette affiche "foo".

7voto

sfusion Points 802

J'ai mis en place un Contrôleur de Base dont tous les autres contrôleurs de s'étendre.

Donc, j'ai un contrôleur de...

<?php
class BaseController extends Zend_Controller_Action
{
  public function init()
  {
    $this->view->foo = "bar";
  }
}

et dans la mise en page et/ou de la vue

<?= $this->foo ?>

3voto

jMo Points 94

La vue standard de variables sont disponibles si vous utilisez la mise en page à l'intérieur de la MVC. Dans un fichier de bootstrap, d'inclure ce:

Zend_Layout::startMvc();

Vous devez ensuite indiquer à chaque contrôleur (ou même chaque action, si vous voulez un contrôle granulaire sur plusieurs dispositions différentes) dont la mise en page à utiliser. J'ai mis le mien dans le init() de chaque contrôleur. Voici un exemple, si votre fichier de mise en page est appelé mise en page.phtml:

$this->_helper->layout->setLayout('layout');

1voto

Haroon Points 270

Eh bien, je suppose que vous pouvez avoir une autre solution en créant helper de vue.. créer un fichier dans l'application/views/helpers et nommez-ce que jamais vous le souhaitez abc.php puis placez le code suivant là-bas.

class Zend_View_helper_abc {

    static public function abc() {
        $html = 'YOUR HTML';
        return $html;
    }
}

Vous pouvez donc utiliser cette aide dans l'agencement comme..

<?= $this->abc() ?>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X