【问题标题】:Zend Framework: Method after controller action, but before view renderedZend Framework:控制器动作之后,视图渲染之前的方法
【发布时间】:2013-01-11 23:13:32
【问题描述】:

我是 Zend 框架的新手,对此找不到明确的答案。我本质上想要一些代码来执行 控制器的页面逻辑之后,但在呈现布局和视图之前。

例如,我想自动刷新 flash 消息并将它们自动提供给布局/视图,这样我就不需要在每个控制器中都这样做。这显然需要在控制器代码执行后发生,因为它可能会添加消息。

$this->view->messages = $this->_helper->flashMessenger->getMessages();

【问题讨论】:

  • 自动刷新 flashMessenger 是什么意思?它总是新鲜的!
  • 我的意思是将getMessages的结果重新分配给view->messages
  • 您不需要这样做,而是使用视图助手来显示 Flash 消息。

标签: php zend-framework


【解决方案1】:

最简单的方法是使用控制器插件,请参阅http://framework.zend.com/manual/1.12/en/zend.controller.plugins.htmlpostDispatch() 方法在您的控制器代码之后但在页面呈现之前运行。

【讨论】:

  • 我在阅读此处的所有答案之前尝试过 postDispatch,它似乎工作正常。我想确认它在我相信它的时候运行了,谢谢!
  • 这对我不起作用。当我的代码在 postDispatch() 中运行并为视图分配变量时,视图已经呈现。
【解决方案2】:

我只是使用:

public function init()
{
    if ($this->getHelper('FlashMessenger')->hasMessages()) {
        $this->view->messages = $this->getHelper('FlashMessenger')->getMessages();
    }
}

我在init() 中使用它,它工作正常。如果您愿意,可以在postDispatch()preDispatch()dispatchLoopShutdown() 中使用它。 controller plugin 不会出格,我只是还没来得及做一个。

【讨论】:

    猜你喜欢
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    相关资源
    最近更新 更多