0

在我的控制器中

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'])));

    }

}

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

4

1 回答 1

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()。

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

请参阅编辑自己的帐户/个人资料

于 2013-03-07T09:15:36.683 回答