Zend framework 从Zend控制器插件中获取视图对象

Zend framework 从Zend控制器插件中获取视图对象,zend-framework,plugins,zend-view,front-controller,Zend Framework,Plugins,Zend View,Front Controller,在我的控制器中,我有一个postDispatch来整合我的FlashMessenger消息: public function postDispatch() { $messages = $this->_helper->getHelper ( 'FlashMessenger' ) ->getMessages (); if ( $this->_helper->getHelper ( 'FlashMessenger' )

在我的控制器中,我有一个postDispatch来整合我的FlashMessenger消息:

public function postDispatch()
{       
    $messages = $this->_helper->getHelper ( 'FlashMessenger' )
        ->getMessages ();

    if ( $this->_helper->getHelper ( 'FlashMessenger' )
        ->hasCurrentMessages () )
    {
        $messages = array_merge ( $messages, $this->_helper->getHelper ( 'FlashMessenger' )
            ->getCurrentMessages () );
        $this->_helper->getHelper ( 'FlashMessenger' )
            ->clearCurrentMessages ();
    }

    $this->view->alert = $messages;
}
我想把它做成一个控制器插件

更新:我意识到我为什么需要它——我想在JSON上下文调用时用JSON传递我的flash消息。除非消息被添加到视图对象,否则我不会收到消息

我能够将消息放入数组,但我不知道如何将它们传递到视图:

class Plugin_FlashMessenger extends Zend_Controller_Plugin_Abstract
{
    public function postDispatch($request)
    {
        $flashmessenger = Zend_Controller_Action_HelperBroker::getStaticHelper ( 'FlashMessenger' );

        $messages = $flashmessenger->getMessages ();
        if ( $flashmessenger->hasCurrentMessages () )
        {
            $messages = array_merge ( $messages, $flashmessenger->getCurrentMessages () );
            $flashmessenger->clearCurrentMessages ();
        }

        // THIS LINE IS WRONG. HOW DO I SEND $messages TO THE VIEW?
        $this->view->alert = $messages;
    }
}

奖金问题-这是实现这一目标的正确方法吗?谢谢

我认为这样做是错误的。FlashMessenger从一个请求到下一个请求几乎没有通知;可在视图中找到

因此,flashmessenger已经是控制器操作助手(出于上述目的),为什么要在此基础上构建另一个助手?:)


因此,您的问题实际上是获取视图中的消息。为此,已经有一个视图辅助对象。从…起这太棒了。

如果您只是想在所有控制器中获得此功能,您只需扩展Zend_Controller_操作,并创建一个包含post dispatch代码的新类。

我在搜索相同内容时找到了您的帖子。基于此,有两种简单的实现方法

One:如果您的视图是在引导过程中初始化的(
resources.view[]=
在您的
application.ini
中),您可以简单地调用它:

$view = Zend_Controller_Front::getInstance()
        ->getParam('bootstrap')
        ->getResource('view');
2:如果您的视图在引导过程中未初始化:

$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
if (null === $viewRenderer->view) {
    $viewRenderer->initView();
}
$view = $viewRenderer->view;

FlashMessenger会在下一页显示警报。因此,如果要将页面发送到此页面,则需要执行一些逻辑(获取以前的消息、获取当前消息、合并它们)。所以我应该把逻辑放在我的布局/视图中?这当然简单得多,但我认为在视图脚本中使用这样的逻辑是不好的做法?@Corey,前面提到的本体Flash Messenger视图助手已经为您处理了getMessages()/getCurrentMessages()逻辑。谢谢。让功能进入所有控制器正是我想要的。我创建了自己的图书馆,但它看起来很笨重。我宁愿添加/删除插件并获得功能。