2010-07-30 182 views
0

我想有以下一些输入:最佳实践

  1. 我想一些意见进行系统的呈现(我可以调用$这个 - >从渲染 这些视图的布局),而不管执行哪个控制器/动作。
  2. 但是,这些视图中使用的内容基于相同的动态生成数据,其背后的代码非常复杂,因此我无法将视图内部的逻辑放在明显的优化/性能问题中。
  3. 我可以用$这个 - > _ helper->动作堆栈中的每个控制器来调用另一个控制器中的视图中的数据会被然而准备,我想在不修改现有的控制器

我会试图把一些东西放在bootstrap中,因为我想要的东西对我的应用程序来说很常见,但是我只是不知道该怎么做。

回答

1

这就是View Helpers的用途。
在View Helper中,您可以获取数据(通过模型或服务层)并为输出做好准备。

<?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

事实上,这就是他们是什么,但是这并没有解决我的问题是不是几个观点如何将数据发送到一个视图,但如何准备一次数据,而无需不论控制器/动作的执行(如果可能)修改上述控制器。 – Max 2010-07-30 15:24:00

+0

扩展我的答案了一下。 some_expensive_data_getter()应该只调用一次。 – 2010-07-30 15:56:26

+0

@ user359650您仍然可以使用'foobar($ data)'从视图中传递数据。 – takeshin 2010-07-31 06:17:21