2008-11-20 102 views
3

我有以下情況: 我已經loged用戶,與DB表標準認證更新Zend_Auth_Storage後修改用戶個人資料

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

當用戶編輯自己的個人資料,我將它保存到數據庫,但我也需要更新存儲(使用標準的Zend_Auth_Storage_Session)。有沒有簡單的方法如何做到這一點?非常感謝。

回答

5

最好的辦法就是不要使用Zend_Auth的存儲來保存可能會改變的信息 - 默認情況下它只保留身份(出於很好的理由)。我可能會創建一個User類,它封裝了使用靜態get_current()方法加載會話中存儲的用戶的所有Auth,ACL(可能是配置文件)功能。這會繞過所有在將其填充到會話中時遇到的一致性問題,以及在實際需要性能提升時爲您提供實現緩存的單一點。

+0

這很有道理,謝謝你的建議 – 2008-11-21 09:43:50

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); 
8
$user = Zend_Auth::getInstance()->getIdentity(); 
$user->newValue = 'new value'; 

假設你在更新會話數據你正在更新數據庫的同樣的語句不需要再次調用數據庫。