0

私の見解では、現在ログインしているユーザー情報を表示しようとしていますが、次を使用してこれを行うことができると考えています

echo "Welcome back " .$this->Session->read('Auth.User.username'). "

これによりユーザー名が表示され、同じアプローチを使用してそのデータベース行の他のフィールドを表示できますが、他のフィールドの一部はいつでも更新できますが、ユーザーがログアウトして再度ログインするまでユーザー ページで更新されません。

これは正しい方法ですか?または、これをより良い方法で実行し、何らかのコードを AppController の beforeFilter() に配置して、ページの読み込みごとに変数を更新し続けることができますか?

4

3 に答える 3

1

データベースがCakePHPの外部から更新され、コントローラーアクションを呼び出さない場合、これに対する唯一の解決策は、ロードされたすべてのページでクエリを実行して現在の値を取得することです。

このためbeforeFilterには、AppControllerのメソッドを使用する必要があります。

function beforeFilter(){
     $user = $this->User->field('name', array('User.id' => $this->Session->read('Auth.User.id')));
     $this->Session->write('Auth.User', $user);
}

それ以外の場合は、JavaScriptとAJAXを使用してデータを随時取得できます。

于 2012-12-07T09:29:22.830 に答える
0

afterSave()ユーザーモデルを作成し、その中に設定した場合はどうなりますか$this->Session->write('Auth.User') = $user;

これはテストされていませんが、機能するはずです。そうすれば、セッションは常に最新の状態になります。

編集:

コメントによると、データがアクセスできないサードパーティのソースから取得されており、ページが読み込まれるたびにデータが更新されていることを確認する必要がある場合は、AppControllerのbeforeFilter()で問題ありません。

ただし、特定のページまたは特定の要素でのみ必要な場合は、更新を呼び出すか、要素のrequestActionを介して呼び出すことができます。

于 2012-12-07T04:34:40.077 に答える
0

セッションデータではなくリアルタイムデータを取得したい

var $uses = array('User');

function beforeFilter(){
    $id = $this->Auth->user('id'); //Using the session's user id is fine because it doesn't change/update
    $user_data = $this->User->findById($id);
    $user_fname = $user_data['User']['fname'];
    $this->set('fname', $user_fname);
}

//In your view
echo 'Welcome Back '. $fname . '!';
于 2012-12-07T13:06:25.050 に答える