【问题标题】:Zend Framework 2: Save session on every page load – front controller plugin?Zend Framework 2:在每次页面加载时保存会话——前端控制器插件?
【发布时间】:2015-04-04 14:25:18
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: php zend-framework2


    【解决方案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 事件注册了回调,这意味着放置在回调函数中的代码在控制器调度时完成我们的工作,而不是在模块初始化时。

    【讨论】:

    • 我赞成解决方案,但我认为我们不需要使用 sharedmanager。只有事件管理器也能做到这一点。 $moduleManager->getEventManager()->attach('dispatch', function($e){ //do your work });
    • 您使用的是什么版本的 ZF2?如果没有 sharedmanager,我无法在 2.3.3 上做到这一点。现在我认为我的解决方案并不好,因为 ZF2 中的调度事件触发了两次。 MvcEvent::EVENT_ROUTE 是很多有用的而不是调度事件
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-23
    • 2013-07-03
    • 2019-11-07
    • 2014-04-18
    • 2012-10-07
    相关资源
    最近更新 更多