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

    }

}

データを送信すると、dbに送信されず、以前の値のみが取得されます。

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 に答える