Обновление Zend_Auth_Storage после редактирования профиля пользователя

У меня следующая ситуация: я вошел в систему, стандартная аутентификация с таблицей БД

$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). Есть ли простой способ это сделать? Большое спасибо.


person Martin Rázus    schedule 20.11.2008    source источник


Ответы (3)


Лучше всего не использовать хранилище Zend_Auth для хранения информации, которая может измениться - по умолчанию в нем хранится только личность (по уважительной причине). Я бы, вероятно, создал класс User, который обернул бы все функции Auth, ACL (и, возможно, профиль), который использует статический метод get_current () для загрузки пользователя, спрятанного в сеансе. Это обходит все проблемы с согласованностью, с которыми вы сталкиваетесь при вставке его в сеанс, а также дает вам единую точку для реализации кэширования, если / когда вам действительно нужно повышение производительности.

person Sean McSomething    schedule 20.11.2008

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

Предполагая, что вы обновляете данные сеанса в том же операторе, в котором обновляете базу данных, нет необходимости снова вызывать базу данных.

person Akeem    schedule 20.11.2008

Я сделал это вот так, работает, но я не знаю, нет ли лучшего способа, как это сделать

$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);  
person Martin Rázus    schedule 20.11.2008