在Zend Framework 2中,我想创建一个模块,在每次页面加载时将某些内容保存到会话中(不涉及视图,不涉及数据库)。保存的数据需要在应用程序范围内可访问。
起初,我认为控制器插件是可行的,但后来我意识到,在控制器中使用插件之前,插件什么都不会做。由于我不想改变每个控制器来调用插件,我认为这不再是一个选项。
在做一些研究时,我发现了这个类似的问题,建议使用"前置控制器插件"。虽然这看起来是一个对我有用的解决方案,但我不确定如何在ZF2中实现它?
当然,我可以在onBootstrap
函数中做所有事情,但我认为这不是做这些事情的正确位置,但我应该在哪里处理任务,ZF2中每个页面加载时运行的代码的正确位置在哪里?
您可以在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
});
}
重要!这段代码只是为调度事件注册回调,这意味着放在回调函数中的代码在控制器调度时间而不是模块初始化时间完成我们的工作。