2

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

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

  1. 我不会在每个操作中不断地获取摘要书籍信息。
  2. 我不是在重复我的观点中的信息。

我想在视图中使用 Zend View Helper、占位符或操作助手 ($this->action...)。

有什么建议么?

4

2 回答 2

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;
     }
}

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

唯一的缺点是它会获取每个操作的图书数据。因此,如果有一些操作不需要图书数据,那么您将吃掉获取它的开销。

于 2010-07-15T17:37:07.183 回答
0

我会动态加载选项卡的内容(应该很容易通过 action helper 与您当前的解决方案集成AjaxContent。只需将操作的响应加载到您的选项卡容器中。

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

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

于 2010-07-15T22:00:48.207 回答