CakephpでAuth->userで出力しているユーザー情報を編集したら、Mysqlの保存はされるが、すぐに表示が変わらない問題
Cakephpではまったので、未来の自分のために残しておきます。
起こった問題
Cakephpで、UsersControllerにmypageアクションを書いて、マイページを作成、プロフィールの自己紹介文やら趣味やらを編集できる様にしているのですが、プロフィール編集画面で、自分のデータを更新しても、Mysql自体のデータは変更されるが、更新しても表示のデータは変わらない。。
いくらページを更新(F5)しても表示は変わらないが、一度ログアウトして再ログインすると、表示が変わっている。。
こんな現象。
Mysqlは更新されても表示が変わらなかった原因
色々調べてみると、ユーザーの情報を
[php]
$this->Auth->user();
[/php]
で出している事が原因でした。
Authからログインユーザーの情報を取得しているので、いくらMysqlを更新してもすぐにはAuthに入っている情報は更新されないですよね。。笑
$this->Auth->user(); データを引っ張ってきていてもすぐに更新させる方法
ModelにafterSaveアクションを書いて、データが保存されたら、実行される様にする
[php]
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;
}
[/php]
こいつをモデルの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