无法更新数据库中的用户配置文件数据

时间:2013-03-07 08:54:30

标签: cakephp

在我的控制器中

public function profile() {
    $UserInfo = $this->Auth->user()
    if(!empty($this->data)) {
            print_r($this->data);
         $this->User->save($this->data);
    } 
    if(!empty($UserInfo['id'])){
        $this->data = $this->User->find('first',array('conditions'=>array('id'=>$UserInfo['id'])));

    }

}

当我提交数据时,它没有提交给db,我只得到以前的值。

1 个答案:

答案 0 :(得分:1)

你为什么在这里查询会话?当然,这将在保存后再次为您提供旧数据。

一如既往地使用数据库,再次更新数据库,然后才覆盖会话(你似乎正在使用cake 1.3):

public function profile() {
    $uid = $this->Session->read('Auth.User.id');
    if (!empty($this->data)) {
        $this->data['User']['id'] = $uid;
        if ($this->User->save($this->data, true, array('email', 'first_name', 'last_name', 'id', ...))) {
            // if you rely on auth session data from the user, make sure to update that here
            $this->Session->write('Auth.User.email', $this->data['User']['email']); // etc
            ...
            // OK, redirect
        } else {
            // ERROR
        }
    } else {
        $this->data = $this->User->find('first', ...);
    }
}

如您所见,我更新了已更改的会话密钥。

如果你使用的是2.x(你现在没有指定),你也可以使用

$this->Auth->login($this->request->data['User']); // must be the User array directly

尽管您必须小心传递之前会话中的所有数据。 如果您打算使用login(),最好再次找到(首先)更新的记录,然后将其传递给login()。

但就个人而言,我更愿意只更新实际更改的字段。

请参阅Editing own account/profile