ZF2 SessionManager用法

Pro*_*roX 6 php zend-framework2

我是ZF2的新手,并不习惯如何做事.我想使用会话来跟踪用户(记住我).我在我班级的一部分有这个代码:

$sessionManager = new \Zend\Session\SessionManager();
$sessionManager->rememberMe($time);

// i want to keep track of my user id too
$populateStorage = array('user_id' => $user->getId());
$storage = new ArrayStorage($populateStorage);
$sessionManager->setStorage($storage);
Run Code Online (Sandbox Code Playgroud)

好的,到目前为止一切顺利.当我尝试:

var_dump($sessionManager->getStorage());
Run Code Online (Sandbox Code Playgroud)

我得到了预期的数据.

在我的程序的另一部分,我想再次检索我的数据(有点像容器):

$sessionManager = new \Zend\Session\SessionManager();
var_dump($sessionManager->getStorage());
Run Code Online (Sandbox Code Playgroud)

这只返回一个空对象.我想这是由于"新",我认为我必须以不同的方式实现SessionManager,但是如何?我不知道.这就是我提出的:

在我的模块中,我现在有:

public function onBootstrap(\Zend\Mvc\MvcEvent $e)
{
    $config = $e->getApplication()
            ->getServiceManager()
            ->get('Configuration');

    $sessionConfig = new SessionConfig();
    $sessionConfig->setOptions($config['session']);
    $sessionManager = new SessionManager($sessionConfig);
    $sessionManager->start();
Run Code Online (Sandbox Code Playgroud)

在我的module.config中:

'session' => array(
    'remember_me_seconds' => 2419200,
    'use_cookies' => true,
    'cookie_httponly' => true,
),
Run Code Online (Sandbox Code Playgroud)

但是怎么办呢?如何获取sessionManager的实例?

lku*_*lku 14

没有详细记录的SessionManagerFactory(zf2 api doc)和SessionConfigFactory(zf2 api doc).使用这些实例化SessionManager非常简单,只需将这些工厂放入ServiceManager配置:

'service_manager' => [
    'factories' => [
        'Zend\Session\SessionManager' => 'Zend\Session\Service\SessionManagerFactory',
        'Zend\Session\Config\ConfigInterface' => 'Zend\Session\Service\SessionConfigFactory',
    ],
],
Run Code Online (Sandbox Code Playgroud)

和模块配置在session_config键下放置会话选项:

'session_config' => [
    'remember_me_seconds' => 2419200,
    'use_cookies' => true,
    'cookie_httponly' => true,
],
Run Code Online (Sandbox Code Playgroud)

就是这样,现在你可以从任何地方的服务定位器中获取SessionManager,例如在控制器中:

/** @var Zend\Session\SessionManager $sm */
$sessionManager = $this->serviceLocator->get('Zend\Session\SessionManager');
Run Code Online (Sandbox Code Playgroud)

这是从2.2版本的Zend Framework(相关拉取请求)开始提供的.

  • 非常不幸的是,Zend 2没有任何适当的文档.似乎zend 2仅适用于开发它的人. (2认同)