ZF2:访问存储服务另一个模块有空容器吗?

时间:2015-04-24 14:01:20

标签: zend-framework2

我有两个模块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;
    }
}

1 个答案:

答案 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;