我有两个模块Application和Manager。应用程序模块具有AuthStorage服务,我使用容器来存储用户级别(管理员或用户)。
但是当从Manager模块访问Application \ Model \ AuthStorage中的容器时,容器似乎是空的。
从另一个模块调用时是否正在创建新实例? (看起来像这样)。
AuthStorage服务实例的范围是否仅限于应用程序模块?
或者如何全局访问userlevel容器?
以下是我从Manager模块访问存储服务的方法:
$this->storage = $this->getServiceLocator()
->get('Application\Model\AuthStorage');
Module.php getServiceConfig()
'factories'=>array(
'Application\Model\AuthStorage' => function($sm){
return new \Application\Model\AuthStorage('db');
},
AuthStorage类
namespace Application\Model;
use Zend\Authentication\Storage;
use Zend\Session\Container;
class AuthStorage extends Storage\Session
{
protected $container;
public function setRememberMe($rememberMe = 0, $time = 1209600)
{
if ($rememberMe == 1) {
$this->session->getManager()->rememberMe($time);
}
}
public function forgetMe()
{
$this->session->getManager()->forgetMe();
}
public function getContainer()
{
if (!isset($this->container)) {
$this->container = new Container('authsessionstorage');
$this->container->userlevel = 0;
}
return $this->container;
}
public function setUserLevel($userlevel)
{
$_container = $this->getContainer();
$_container->userlevel = $userlevel;
}
public function getUserLevel()
{
$_container = $this->getContainer();
return $_container->userlevel;
}
public function isAdministrator() {
echo '<pre>', 'userlevel = ' . print_r($this->getUserLevel(), true), '</pre>';
if ($this->getUserLevel() == 100) {
return true;
}
return false;
}
}
答案 0 :(得分:0)
Zend \ Session \ Container只是一个用于处理PHP $ _SESSION的接口,因此它不是ZF2中特定于模块的。
这一行;
$this->container = new Container('authsessionstorage');
正在设置一个名为authsessionstorage的容器
和这一行;
$this->container->userlevel = 0;
将键/值设置为userlevel / 0
要在其他任何地方检索此键值,您只需执行此类操作;
$container = new Container('authsessionstorage');
echo $container->userlevel;