Обновление Zend_Auth_Storage после редактирования профиля пользователя - PullRequest
3 голосов
/ 20 ноября 2008

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

$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 ]

8 голосов
/ 20 ноября 2008
$user = Zend_Auth::getInstance()->getIdentity();
$user->newValue = 'new value';

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

5 голосов
/ 20 ноября 2008

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

3 голосов
/ 20 ноября 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);  
...