如何轻松访问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;
}
是否存在访问这些变量的更简单方法? 感谢
答案 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];
}
}