我是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中。
有人有想法吗?
感谢
答案 0 :(得分:1)
在您的父MyController
中使用postDispatch hook呢?
引用该页面:
Zend_Controller_Action
指定两个 可以调用bookend的方法 请求的操作,preDispatch()
和postDispatch()
。
这些可用于 多种方式:验证 身份验证和ACL之前 运行动作(通过调用_forward()
中的preDispatch()
,将跳过该操作),例如, 或者将生成的内容放入 网站范围模板(postDispatch()
)。
也许这可能会成功?
答案 1 :(得分:0)
我实际上贡献了an enhancement to FlashMessenger,它提供了许多您正在寻找的功能。