更容易访问Zend_Registry

时间:2011-09-10 15:17:56

标签: zend-framework

如何轻松访问Zend_Registry中的session或acl变量?

我实际上正在使用这个系统。

   if(Zend_Registry::get('session')->loggedUser->getRole() == null){
    if(Zend_Registry::get('acl')->isAllowed(Zend_Registry::get('session')->loggedUser->getRole(), 'administration') == false) return false;
   } 

是否存在访问这些变量的更简单方法? 感谢

2 个答案:

答案 0 :(得分:1)

这对你来说是否“更容易”?

$session = Zend_Registry::get('session');
if ($session->loggedUser->getRole() == null) {
    //etc.
}

答案 1 :(得分:1)

$reg = Zend_Registry::getInstance();
echo $reg->session->whatever;
echo $reg['session']['whatever'];

然而,好的做法是

$loggedUser = AppContext::getLoggedUser(); // :)

真实世界的例子

class Smapp 
{
    /**
     * @var Entities\User
     */
    protected static $currentUser;
    protected static $acl;
    protected static $services = array();

    public function __construct($application)
    {
        parent::__construct($application);
    }

    /*
    public static function getEntityManager()
    {
        if ($this->hasPluginResource('entitymanagerfactory')) {
            return $this->getResource('entitymanagerfactory');
        } else {
            throw new InvalidArgumentException("Doctrine ExtensionManagerResource in not installed");
        }

    }
    */

    public static function setCurrentUser(Entities\User $user)
    {
        self::$currentUser = $user;
    }

    /**
     * @return Entities\User
     */
    public static function getCurrentUser()
    {
        if (null === self::$currentUser) {
            $usersService = self::getService('user');
            $emptyUser = $usersService->getUserModel();
            self::setCurrentUser($emptyUser);
        }
        return self::$currentUser;
    }


    /**
     * @return string
     */
    /*
    public static function getCurrentUserId()
    {
        $user = self::getCurrentUser();
        return $user->getId();
    }
    */

    public static function setAcl(Smapp\Acl $acl)
    {
        self::$acl = $acl;
    }

    /**
     * @return Smapp_Acl
     */

    public static function getAcl()
    {
        if (null === self::$acl) {
            self::setAcl(Smapp\Acl::getInstance());
        }
        return self::$acl;
    }

    /**
     * @param string $serviceName
     * @throws \InvalidArgumentException
     * @return Smapp\Domain\Service
     */
    public static function getService($serviceName)
    {
        $serviceClassName = 'Services\\' . ucfirst((string)$serviceName);
        if (!class_exists($serviceClassName)) {
            throw new \InvalidArgumentException("Service [{$serviceName}] does not exists");
        }
        if (!isset(self::$services[$serviceClassName]) or !self::$services[$serviceClassName] instanceof Smapp\Domain\Service) {
            self::$services[$serviceClassName] = new $serviceClassName;
            if (method_exists($serviceClassName, 'init')) {
                $serviceClassName->init();
            }
        }
        return self::$services[$serviceClassName];
    }
 }
相关问题