Joh*_*ohn 5 storage zend-framework zend-auth
这很简单.我写
$auth->getStorage()->write($user);
Run Code Online (Sandbox Code Playgroud)
然后我想,在一个单独的进程中加载这个$ user,但我不能因为
$user = $auth->getIdentity();
Run Code Online (Sandbox Code Playgroud)
是空的.我不是只是......设定它?为什么不起作用?HALP?
[编辑2011-04-13]
大约两年前就有人问过这个问题.但事实是,我在2010年7月重复了这个问题并得到了一个很棒的答案,我当时根本就不明白.
我已经构建了一个非常好的litte类,我使用与Zend_Auth相同的存储引擎在所有项目中使用(有时需要额外调整),但是避免了所有不好的事情.
<?php
class Qapacity_Helpers_Storage {
public function save($name = 'default', $data) {
$session = new Zend_Session_Namespace($name);
$session->data = $data;
return true;
}
public function load($name = 'default', $part = null) {
$session = new Zend_Session_Namespace($name);
if (!isset($session->data))
return null;
$data = $session->data;
if ($part && isset($data[$part]))
return $data[$part];
return $data;
}
public function clear($name = 'default') {
$session = new Zend_Session_Namespace($name);
if (isset($session->data))
unset($session->data);
return true;
}
}
?>
Run Code Online (Sandbox Code Playgroud)
它应该可以工作。
这是 Auth getIdentity 函数的实现。
/**
* Returns the identity from storage or null if no identity is available
*
* @return mixed|null
*/
public function getIdentity()
{
$storage = $this->getStorage();
if ($storage->isEmpty()) {
return null;
}
return $storage->read();
}
Run Code Online (Sandbox Code Playgroud)
下面是 PHP Session Storage 写入和读取函数的实现:
/**
* Defined by Zend_Auth_Storage_Interface
*
* @return mixed
*/
public function read()
{
return $this->_session->{$this->_member};
}
/**
* Defined by Zend_Auth_Storage_Interface
*
* @param mixed $contents
* @return void
*/
public function write($contents)
{
$this->_session->{$this->_member} = $contents;
}
Run Code Online (Sandbox Code Playgroud)
您确定正在加载 Zend_Auth 类的同一个实例吗?
你正在用吗
$auth = Zend_Auth::getInstance();
Run Code Online (Sandbox Code Playgroud)
也许您在 getIdentity 方法之后调用 write 方法?
不管怎样,正如我之前所说,你所做的应该有效。