你爲什麼在這裏查詢會話?當然這會在保存之後再次獲得舊數據。
使用數據庫一如既往,再次更新數據庫,然後纔可能覆蓋會話(你似乎是用餅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
什麼cakephp版本?您需要始終提供此信息以獲取正確的答案。 – mark 2013-03-07 09:14:36
@amit:Cake提供了非常方便的debug()方法,可以使用調試級別0(在生產中)和調試級別1或2(用於開發)。你可以用debug($ this-> data)替換你的print_r; – 2013-03-07 14:19:16