你为什么在这里查询会话?当然,这总是会在保存后再次为您提供旧数据。
像往常一样使用数据库,再次更新数据库,然后才可能覆盖会话(您似乎使用的是 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()。
但就个人而言,我更喜欢只更新实际更改的字段。
请参阅编辑自己的帐户/个人资料