ZF2获取全局会话容器

奥利弗·科尼格(Oliver Konig)

我发现了如何获得这样的会话容器:$ session = new \ Zend \ Session \ Container('base');

但是,如果在处理HTTP请求期间需要在许多地方访问会话该怎么办?假设在IndexController中应用程序模块的indexAction中,然后将其重定向到User \ Controller \ IndexController并需要再次访问该会话,然后在一个或两个视图助手中,谁又知道多久一次。

每次重新构造会话容器时,这都是在浪费处理时间。是的,我调试了它以查看构造函数中发生的事情,是的,在幕后执行了一些代码。似乎构造函数不会只返回全局变量或其他不可变的且不需要构造过程的东西。

那么该怎么办?我应该为此创建服务吗?控制器插件?一个视图助手?服务,控制器插件和视图助手,后者调用该服务?

我确定这是很多人必须遇到并处理过的事情,但是我找不到任何信息。

非常感谢任何提示。提前谢谢了!:-)

奥利弗·科尼格(Oliver Konig)

这是一个更完善和改进的版本。它由服务“ SessionService”,一个ViewHelper(称为SessionService),一个ControllerPlugin(也称为SessionService)组成,并显示如何在配置文件“ module.config.php”中进行设置。

确保在配置中设置“使用”路径或使用绝对类路径。

SessionService.php:

class SessionService
{
    protected $sessionContainer;

    public function setSessionContainer(
        $sessionContainer
    ) {
        $this->sessionContainer = $sessionContainer;
    }

    public function __invoke() {
        return $this->sessionContainer;
    }
}

SessionHelper.php:

class SessionHelper extends \Zend\View\Helper\AbstractHelper
{
    protected $sessionService;

    public function setSessionService(
        $sessionService
    ) {
        $this->sessionService = $sessionService;
    }

    public function __invoke() {
        return $this->sessionService;
    }
}

SessionPlugin.php:

class SessionPlugin extends AbstractPlugin
{
    protected $sessionService;

    public function setSessionService(
        $sessionService
    ) {
        $this->sessionService = $sessionService;
    }

    public function __invoke() {
        return $this->sessionService;
    }
}

module.config.php:

'service_manager' => array(
    'factories' => array(
        'sessionService' => function(
            ServiceLocatorInterface $serviceLocator
        ) {
            $sessionContainer = new \Zend\Session\Container('base');
            $sessionService = new SessionService();
            $sessionService->setSessionContainer($sessionContainer);
            return $sessionService;
        },
    ),
),

'controller_plugins' => array(
    'factories' => array(
        'sessionPlugin' => function(
            AbstractPluginManager $pluginManager
        ) {
            $sessionService = $pluginManager->getServiceLocator()->get('sessionService');
            $sessionPlugin = new SessionPlugin();
            $sessionPlugin->setSessionService($sessionService);
            return $sessionPlugin;
        },
    ),
),

'view_helpers' => array(
    'factories' => array(
        'sessionHelper' => function (
            AbstractPluginManager $helperPluginManager
        ) {
            $sessionService = $helperPluginManager->getServiceLocator()->get('sessionService');
            $sessionHelper = new SessionHelper();
            $sessionHelper->setSessionService($sessionService);
            return $sessionHelper;
        },
    ),
),

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在zf2上使用会话(恢复容器)

来自分类Dev

全局更改ZF2表单格式

来自分类Dev

zf2会话验证失败

来自分类Dev

ZF2在工厂获取参数

来自分类Dev

ZF2在工厂获取参数

来自分类Dev

zf2将供应商移至全局目录?

来自分类Dev

覆盖ZF2全局/本地配置:取消设置

来自分类Dev

覆盖ZF2全局/本地配置:取消设置

来自分类Dev

zf2导航,如何根据会话隐藏某些项目

来自分类Dev

ZF2翻译

来自分类Dev

Zf2 Db会话插入但不更新数据库中的会话

来自分类Dev

Zf2 Db会话插入但不更新数据库中的会话

来自分类Dev

在zf2中获取所有模块名称

来自分类Dev

zf2获取控制器中的JSON值

来自分类Dev

ZF2从路线获取控制器和动作

来自分类Dev

zf2从表单获取过滤后的值

来自分类Dev

在zf2中获取所有模块名称

来自分类Dev

如何在zf2中获取最后插入的ID?

来自分类Dev

我如何从zf2中的url获取参数?

来自分类Dev

ZF2从路线获取控制器和动作

来自分类Dev

使用ZF2 Query从XML文档获取值

来自分类Dev

从zf2中的表单对象获取输入验证器

来自分类Dev

ZF2如何在视图中使用全局变量

来自分类Dev

如何在ZF2中全局将变量传递到layout.phtml?

来自分类Dev

ZF2:使用前向插件时,如何全局更改所有Controller的Request对象?

来自分类Dev

将会话变量传递到zf2中的外部url

来自分类Dev

ZF2,在创建侦听器时引发了异常,并且会话验证失败

来自分类Dev

ZF2 FileUpload集合

来自分类Dev

ZF2联合+分页