编辑用户配置文件后更新Zend_Auth_Storage

时间:2008-11-20 11:20:23

标签: php zend-framework authentication zend-auth

我有以下情况: 我有用户,使用DB表进行标准认证

$authAdapter = new Zend_Auth_Adapter_DbTable(Zend_Db_Table::getDefaultAdapter()); 
$authAdapter->setTableName('users'); 
$authAdapter->setIdentityColumn('user_name'); 
$authAdapter->setCredentialColumn('password'); 

当用户编辑他的个人资料时,我将其保存到Db中,但我还需要更新存储空间(使用标准Zend_Auth_Storage_Session)。有什么简单的方法怎么做?非常感谢。

3 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:5)

你最好的选择是不使用Zend_Auth的存储来保存可能会改变的信息 - 默认情况下它只保留身份(出于正当理由)。我可能会创建一个User类,它包含所有Auth,ACL(以及可能的配置文件)功能,这些功能使用静态get_current()方法来加载存储在会话中的用户。这会绕过在填充到会话中时遇到的所有一致性问题,以及在实际需要性能提升时为您提供实现缓存的单点。

答案 2 :(得分:3)

我这样做了,它有效,但我不知道是否有更好的方法,怎么做

$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);