CakephpでAuth->userで出力しているユーザー情報を編集したら、Mysqlの保存はされるが、すぐに表示が変わらない問題

2017年10月26日

Cakephpではまったので、未来の自分のために残しておきます。

起こった問題

Cakephpで、UsersControllerにmypageアクションを書いて、マイページを作成、プロフィールの自己紹介文やら趣味やらを編集できる様にしているのですが、プロフィール編集画面で、自分のデータを更新しても、Mysql自体のデータは変更されるが、更新しても表示のデータは変わらない。。

いくらページを更新(F5)しても表示は変わらないが、一度ログアウトして再ログインすると、表示が変わっている。。

こんな現象。

Mysqlは更新されても表示が変わらなかった原因

色々調べてみると、ユーザーの情報を

$this->Auth->user();

で出している事が原因でした。

Authからログインユーザーの情報を取得しているので、いくらMysqlを更新してもすぐにはAuthに入っている情報は更新されないですよね。。笑

$this->Auth->user(); データを引っ張ってきていてもすぐに更新させる方法

ModelにafterSaveアクションを書いて、データが保存されたら、実行される様にする

    public function afterSave($created, $options = array()){
        parent::afterSave($created,$options);

        //updating authentication session
        App::uses('CakeSession', 'Model/Datasource');
        CakeSession::write('Auth',$this->findById(AuthComponent::user('id')));

        return true;
    }

こいつをモデルのUser.phpに書いたら、反映される様になります!
データ保存したら、afterSaveを呼んで、Auth SessionのデータDBから呼んで、書き換えるって言う処理ですね。

その他にも、
$this->Session->write と $this->Session->readを使って出したりも出来ますが、
afterSaveをするのが一番楽でした。

afterSaveは何かデータが保存されたら必ず実行されるので、すぐ情報を更新したい時に使うと良いっぽいですね。

参考
http://stackoverflow.com/questions/13440820/cakephp-2-0-how-to-update-auth-data