代码之家  ›  专栏  ›  技术社区  ›  Martin Rázus

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

  •  3
  • Martin Rázus  · 技术社区  · 17 年前

    我有以下情况: 我已登录用户,使用DB表进行标准身份验证

    $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 回复  |  直到 17 年前
        1
  •  8
  •   Ibrahim Azhar Armar    14 年前
    $user = Zend_Auth::getInstance()->getIdentity();
    $user->newValue = 'new value';
    

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

        2
  •  5
  •   Sean McSomething    17 年前

    你最好的选择是不要使用Zend_Auth的存储来保存可能发生变化的信息——默认情况下,它只保存身份(有充分的理由)。我可能会创建一个User类,它封装了所有Auth、ACL(可能还有配置文件)功能,并使用静态get_current()方法加载会话中隐藏的用户。这绕过了将其填充到会话中时遇到的所有一致性问题,并为您提供了一个在实际需要性能提升时实现缓存的单一点。

        3
  •  4
  •   Martin Rázus    17 年前

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

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