2

我是 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();
}

因此,对于每个控制器,我都可以使用 $this->AddError($error); 然后我在布局中呈现 $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 中。

有人有什么想法吗?

谢谢

4

2 回答 2

1

在你的父母中使用postDispatch 钩子MyController怎么样?

引用该页面:

Zend_Controller_Action指定可以调用的两个方法来结束请求的操作,preDispatch() 以及 postDispatch().
这些可以通过多种方式使用:例如,在运行操作之前验证身份验证和 ACL (通过调用 _forward()preDispatch()操作将被跳过),或者将生成的内容放在站点范围的模板中( postDispatch())

也许这可以解决问题?

于 2009-09-27T14:35:08.903 回答
0

实际上,我对 FlashMessenger 进行了增强,它提供了许多您正在寻找的功能。

于 2011-06-07T21:01:44.110 回答