Zend Framework 2:在每个页面加载 - 前端控制器插件上保存会话?

时间:2015-04-04 14:25:19

标签: php zend-framework2

在Zend Framework 2中,我想创建一个模块,在每次页面加载时将某些内容保存到会话中(不涉及任何视图,不涉及数据库)。保存的数据需要在整个应用程序范围内可访问。

起初我认为控制器插件是可行的方法,但后来我意识到插件在控制器中使用之前什么都不做。由于我不想改变每个控制器来调用插件,我不认为这是一个选项。

在进行一些研究时,我发现了this similar question,其中提出了“前端控制器插件”。虽然这看起来像是一个可以为我工作的解决方案,但我不确定如何在ZF2中实现它?

当然我可以在onBootstrap函数中做所有事情,但我不认为这是做这些事情的正确位置,但我应该如何处理任务,哪里是代码的正确位置在ZF2中的每个页面加载运行?

1 个答案:

答案 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事件注册回调,这就是放在回调函数中的代码在控制器调度时间内完成我们的工作,而不是模块初始化时间。