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(相关拉取请求)开始提供的.