2010-07-30 10 views
0

Je voudrais avoir une entrée sur les points suivants:meilleures pratiques sur le rendu de plusieurs points de vue basé sur les mêmes données dynamiques

  1. Je voudrais des vues à rendre systématiquement (je peux appeler $ this-> render de ma disposition pour ces vues) quel que soit le contrôleur/action est exécuté.
  2. Cependant, le contenu utilisé dans ces vues est basé sur les mêmes données générées dynamiquement et le code qui le sous-tend est assez complexe. Je ne peux donc pas placer la logique dans les vues pour des problèmes d'optimisation/performance évidents.
  3. je pourrais utiliser $ this -> _ helper-> ActionStack dans chaque contrôleur pour appeler un autre contrôleur dans lequel les données pour les points de vue serait prêt mais je voudrais faire sans modifier les contrôleurs existants

Je serais tenté de mettre quelque chose dans le bootstrap puisque ce que je veux est commun à mon application mais je ne sais pas quoi faire.

Répondre

1

Voilà pour quoi sont View Helpers.
Dans View Helper, vous pouvez récupérer vos données (via des modèles ou une couche de service) et les préparer pour la sortie.

<?php 
class View_Helper_Foobar extends Zend_View_Helper_Abstract 
{ 
    protected $_data; 

    public function foobar() 
    { 
     if (null !== $this->_data) { 
      $this->_data = some_expensive_data_getter(); 
     } 

     return $this; 
    } 

    public function __toString() 
    { 
     return $this->view->partial('foobar.phtml', array('data' => $this->_data)); 
    } 
} 
+0

En effet, c'est ce qu'ils sont pour mais cela ne répond pas à ma question qui n'est pas sur la façon d'envoyer des données à une vue, mais comment préparer les données une fois pour plusieurs points de vue, quel que soit le contrôleur/action exécutée sans avoir à (si possible) modifier les contrôleurs susmentionnés. – Max

+0

étendu ma réponse un peu. some_expensive_data_getter() ne devrait être qu'une seule fois. –

+0

@ user359650 Vous pouvez toujours utiliser 'foobar ($ data)' pour transmettre les données de la vue. – takeshin