编辑用户个人资料后更新Zend_Auth_Storage

3
我有以下情况: 我已经登录了用户,使用数据库表进行标准认证。
$authAdapter = new Zend_Auth_Adapter_DbTable(Zend_Db_Table::getDefaultAdapter()); 
$authAdapter->setTableName('users'); 
$authAdapter->setIdentityColumn('user_name'); 
$authAdapter->setCredentialColumn('password'); 

当用户编辑他的个人资料时,我将其保存到数据库中,但我还需要更新存储(使用标准的Zend_Auth_Storage_Session)。有没有简单的方法可以做到这一点?非常感谢。

3个回答

8
$user = Zend_Auth::getInstance()->getIdentity();
$user->newValue = 'new value';

假设您正在同一语句中更新会话数据和数据库,则无需再次调用数据库。

5
您最好不要使用Zend_Auth的存储来保存可能会更改的信息 - 默认情况下,它仅保存身份验证信息(有很好的原因)。我可能会创建一个用户类,其中包含所有Auth、ACL(还有可能是个人资料)功能,该类使用静态get_current()方法加载存储在会话中的用户。这样可以避免将其塞入会话时遇到的所有一致性问题,并为您提供单一的实现缓存的起点,以便在您真正需要性能提升时使用。

4

我已经这样做了,它可以工作,但是我不知道是否有更好的方法,如何做到更好。

$user_data = User::getUser($user_id)->toArray();
unset($user_data['password']);

$std_user = new stdClass();

foreach ($user_data as $key => $value)
{
   $std_user->$key = $value;
}

$auth = Zend_Auth::getInstance();     
$auth->getStorage()->write($std_user);  

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接