在我的控制器中
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,我只得到以前的值。
答案 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()。
但就个人而言,我更愿意只更新实际更改的字段。