スポンサードリンク

CakePHP
CakePHP

ログインユーザーがユーザー名を変更した場合

よくある「ようこそ○○さん」と表記させていると

○○の部分が変更しても変わらないという現象があります。

そこを変更後も表示が変わるようにしました。

スポンサードリンク

Authはセッション情報を読んでいる

Userテーブルを使ってログインするようにすると

Authコンポーネントにログイン情報が入っています。

で、usernameフィールドを変更したとしても

フィールドの値が変更されただけで

セッションの値は変更されていなかったんですね。

なので、フィールドを変更したら

セッション情報も変更するようにすればいいということです。

Userコントローラーを少し編集します。

Controller/UsersConttoller.php
※editというアクション編集するという仮定です。

function edit($id = null) {
	if (!$id) {
		throw new NotFoundException(__('エラー:【戻る】を押して下さい!'));
	}
	$user = $this->User->findById($id);
	if (!$user) {
		throw new NotFoundException(__('エラー:データがありません【戻る】を押して下さい!'));
	}
	// POST送信なら
	if($this->request->is('post') || $this->request->is('put')) {
		$this->User->create();
		if ($this->User->save($this->request->data)) {
			//変更できたらusernameは更新する
			$user = $this->User->find('first', array('conditions' => array('id' => $this->Auth->user('id')), 'recursive' => -1));
			$this->Session->write('Auth', $user);
			$this->Session->setFlash(__('変更しました'));
			$this->redirect(array('action' => 'index'));
		} else {
			$this->Session->setFlash(__('変更できませんでした。やり直して下さい'));
		}
	}

	//指定プライマリーキーのデータをセット
	$this->request->data = $user;
}

saveメソッドで編集できたら

AuthコンポーネントにあるIDでテーブルの値を読み込んで

セッションを書き換えるということです。

こうすると、

「ようこそ○○さん」という表記をしていた場合は

usernameを変更した後、表記が変わります。

自動では変わらないんですね。

こういう表記をしていなかったら

この作業はいりません。

こちらを参考にさせていただきました。
(参考)
CakePHP – usersテーブルを更新した際に $this->Auth->user() も更新する方法

スポンサードリンク