web-dev-qa-db-fra.com

Envoi de variables à la mise en page dans Zend Framework

Dans mon projet, plusieurs éléments dynamiques apparaissent régulièrement sur chaque page. Je les ai mis dans mon layout.phtml

Ma question est la suivante: comment puis-je envoyer des variables dans ma mise en page à partir de mes contrôleurs?

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

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

Et recevez-le dans la vue avec

echo $this->whatever;

Je n'arrive pas à comprendre comment faire la même chose avec ma mise en page. Peut-être y a-t-il une meilleure solution au problème?

38
user138095

Sans utiliser d’aide ou de plugin, faites: 

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

Après cela, vous pouvez utiliser les éléments suivants dans votre mise en page:

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

Cela affichera "foo".

43
10us

J'ai implémenté un contrôleur de base auquel tous les autres contrôleurs s'étendent.

J'ai donc un contrôleur ...

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

et dans la mise en page et/ou la vue

<?= $this->foo ?>
7
user138095

Les variables de vue standard sont disponibles si vous utilisez la présentation dans MVC. Dans le fichier de démarrage, incluez ceci:

Zend_Layout::startMvc();

Vous devez ensuite indiquer à chaque contrôleur (ou même à chaque action si vous souhaitez un contrôle granulaire sur plusieurs dispositions différentes) quelle disposition utiliser. Je mets le mien dans le init () de chaque contrôleur. Voici un exemple, si votre fichier de présentation s'appelle layout.phtml:

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

Eh bien, je suppose que vous pouvez avoir une autre solution en créant view helper .. créez un fichier dans application/views/helper et nommez-le comme vous le souhaitez abc.php, puis placez le code suivant.

class Zend_View_helper_abc {

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

Donc, vous pouvez utiliser cette aide dans la mise en page comme ..

<?= $this->abc() ?>
1
Haroon
class IndexController extends Zend_Controller_Action
{

   public function init()
   {
      $this->_layout = $this->_helper->layout->getLayoutInstance();
      $this->_layout->whatever = $this->view->render('test.phtml);
   }
}

Dans le fichier de mise en page, vous pouvez appeler

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

Si dans certaines actions si vous ne voulez pas cette section, alors:

public function viewAction()
{
   $this->_layout->whatever = null;
}
1
kaushik

Les aides de vue sont également une bonne idée. J'avais un site Web de commerce électronique, avec un layout.phtml avec des menus avec des catégories et des sous-catégories que je devais importer de la base de données.

Pour cela, j'ai fait ce qui suit:

Bootstrap.php:

protected function _initHelperPath() 
{

    $view = $this->bootstrap('view')->getResource('view');

    $view->setHelperPath(APPLICATION_PATH . '/views/helpers', 'View_Helper');

}

application.ini:

resources.view[]=

Dans views/helpers, j'avais un fichier appelé Menus:

class View_Helper_Menus extends Zend_View_Helper_Abstract {

    public function categories(){

       $categories = new Application_Model_DbTable_Categories();

       return $categories->fetchAll();

    }

    public function subCategories(){

        $subCategories = new Application_Model_DbTable_SubCategories();

        return $subCategories->fetchAll();

    }

}

Dans layout.phtml, je devais simplement appeler l'assistant spécifique, puis appeler les méthodes à partir de celui-ci:

$menu = $this->getHelper('Menus');
$categories = $menu->categories();
$subCategories = $menu->subCategories();

J'espère que cela aidera quelqu'un qui doit importer des données de la base de données pour rendre la mise en page.

0
Bruce

En remarque, si vous envoyez un json à un moment donné dans votre application, veillez à ce que les variables de vue globale ne soient pas envoyées avec la réponse.

0
conradfr