在Zend Framework 2中,我想创建一个模块,在每次页面加载时将某些内容保存到会话中(不涉及任何视图,不涉及数据库)。保存的数据需要在整个应用程序范围内可访问。
起初我认为控制器插件是可行的方法,但后来我意识到插件在控制器中使用之前什么都不做。由于我不想改变每个控制器来调用插件,我不认为这是一个选项。
在进行一些研究时,我发现了this similar question,其中提出了“前端控制器插件”。虽然这看起来像是一个可以为我工作的解决方案,但我不确定如何在ZF2中实现它?
当然我可以在onBootstrap
函数中做所有事情,但我不认为这是做这些事情的正确位置,但我应该如何处理任务,哪里是代码的正确位置在ZF2中的每个页面加载运行?
答案 0 :(得分:1)
您可以在Module.php类的init()方法中使用SharedEventManager。
您可以将侦听器注册到MVC调度事件,并在Zend Framework 2触发的调度事件上运行代码。
例如:
public function init(ModuleManager $moduleManager)
{
$sharedEvents = $moduleManager->getEventManager()->getSharedManager();
$sharedEvents->attach('*', 'dispatch', function($e){
//do your work
});
}
重要!这段代码只是为dispatch事件注册回调,这就是放在回调函数中的代码在控制器调度时间内完成我们的工作,而不是模块初始化时间。