Zend FlashMessenger的问题

时间:2009-09-27 14:25:14

标签: zend-framework-mvc

我是Zend框架的新手,我遇到了问题。 我创建了一个控制器抽象类,它实现了如下函数:

protected function AddError($message) {
    $flashMessenger = $this->_helper->FlashMessenger;
    $flashMessenger->setNamespace('Errors');
    $flashMessenger->addMessage($message);
    $this->view->Errors = $flashMessenger->getMessages();
}

protected function activateErrors()
{
    $flashMessenger = $this->_helper->FlashMessenger;
    $flashMessenger->setNamespace('Errors');
    $this->view->Errors = $flashMessenger->getMessages();
}

因此对于我能够使用的每个控制器 $这 - > AddError($误差); 然后我在布局中渲染$ error。 所以我不想在每个控制器中处理flashMesenger。

但是我必须在执行每个动作时执行activateErrors。

例如

我有一个控制器测试

类TestController扩展了MyController {

public function indexAction() {

    $this->AddError("Error 1");
    $this->AddError("Error 2");
    $this->activateErrors();
}


public function index1Action() {

    $this->AddError("Esdsd 1");
    $this->AddError("sddsd 2");
    $this->activateErrors();
}   

}

有没有办法可以在操作结束时为每个控制器执行每个操作中的activateErrors,而不会重复代码。

我的意思是我不希望在每个动作中包含此代码。也许有一种方法可以将它包含在我的抽象类MyController中。

有人有想法吗?

感谢

2 个答案:

答案 0 :(得分:1)

在您的父MyController中使用postDispatch hook呢?

引用该页面:

  

Zend_Controller_Action指定两个   可以调用bookend的方法   请求的操作,preDispatch()和   postDispatch()
这些可用于   多种方式:验证   身份验证和ACL之前   运行动作(通过调用   _forward()中的preDispatch(),将跳过该操作),例如,   或者将生成的内容放入   网站范围模板postDispatch()

也许这可能会成功?

答案 1 :(得分:0)

我实际上贡献了an enhancement to FlashMessenger,它提供了许多您正在寻找的功能。