Zend Framework - 在Controller中重用视图头信息

时间:2010-07-15 15:25:23

标签: php zend-framework zend-view placeholder

在Zend Framework中,我有一个常见的用例,我需要在特定控制器的视图顶部传播相同的信息。

例如,如果我有一个“Book”控制器,我想在页面顶部显示摘要书信息,并在书的下方有一个标签界面,以显示评论,详细信息等。每个标签是书籍控制器中的一个动作。在控制器中的视图之间传播摘要信息的建议方法是:

  1. 我不会在每个动作中不断获取摘要书信息。
  2. 我不是在我的观点中重复信息。
  3. 我在视图中使用了Zend View Helper,占位符或动作助手($ this-> action ...)。

    有什么建议吗?

2 个答案:

答案 0 :(得分:0)

听起来您想要在控制器上的init()方法中获取图书信息:

class MyController extends Zend_Controller_Action
{
     protected $_book;

     public function init()
     {
         // get the book data/model, etc
         $book = $this->_getBook();

         // if necessary, store the book for use in the actions
         $this->_book = $book;

         // store the book in the view
         $this->view->book = $book;
     }
}

如果一个动作只呈现书籍信息,那么你可以放弃空行动方法,让视图脚本做他们的事情。

唯一的缺点是它会在每个操作中获取图书数据。因此,如果有一些动作不需要书籍数据,那么你就会花掉取得它的开销。

答案 1 :(得分:0)

我会动态加载标签的内容(应该很容易通过动作助手AjaxContent与您当前的解决方案集成。只需将动作的响应加载到标签容器中。

如果您决定坚持使用非ajax解决方案,则代码必须重复,因为您需要在多个页面上使用相同的部分信息。 partial应该更适合您的需求,因为视图助手执行某种逻辑(或逻辑代理),而您只需要它用于演示和放大。标记。

假设您正在使用某种智能缓存方法(每个部分/选项卡可能有一个缓存条目),那么所提取的信息在您的系统上应该不会那么难。