Cakephp:如何在Session中读取用户数据?

时间:2010-10-11 07:11:03

标签: database session cakephp cakephp-1.3

我想从用户模型中收集用户的最新信息并将其存储在会话中。

所以我这样做

//渲染之前  函数beforeRender(){

    if($this->Session->check('Auth.User')) {
        $this->User->recursive = -1;
        $currentUser = $this->User->read(null, $this->Session->read('Auth.User.id'));
        $this->set(compact('currentUser'));
    }

}

它在用户模型中工作正常。

当我转到页面时,它会给我一个错误,因为User-> read不起作用,因为该模型没有附加在那里。

什么是最好的解决方案?

  1. 我想在网站的每个页面上找到Loggedin用户的最新信息。
  2. 来自会话的最新而非Auth.User,因为 - 当我编辑名称或照片等个人资料内容时。它仍然引用用户登录时存储的旧数据。
  3. 必须在每个页面上显示,如顶部的Stackoverflow用户信息
  4. alt text

    哪种方法最好?

3 个答案:

答案 0 :(得分:4)

  1. 创建/app/app_controller.php
  2. 在该控制器中创建beforeRender功能。
  3. 使用通常的$uses
  4. 请参阅book

答案 1 :(得分:2)

其他建议似乎为您的应用程序增加了一些开销(通过加载和查询每个请求的User模型)。您是否考虑过在用户模型发生更新时更新过时的会话数据?

<?php
class UsersController extends AppController {
    public function edit() {
        $userId = $this->Session->read('Auth.User.id');
        // populate form
        if (!$this->data) {
            $this->data = $this->User->read($userId, null);
            return;
        }
        // update user
        $saved = $this->User->save($this->data);
        if ($saved) {
            $user = $this->User->read(null, $this->User->id);
            $this->Session->write('Auth.User', $user['User']); // update session
            $this->Session->setFlash('Account details have been updated');
            return $this->redirect(array('action' => 'profile'));
        }
        $this->Session->setFlash('Please correct the validation errors below');
    }
}
?>

这意味着您将需要收集所需的数据,而无需任何其他查询(如果使用phpcake会话存储,则来自磁盘;如果使用{{1},则使用单个会话查询} storage)。

答案 2 :(得分:1)

您可以尝试在beforeRender中加载模型,如下所示:$this->load('User'),这应该在每个控制器中为您加载模型。 http://book.cakephp.org/view/992/loadModel