3

次のような状況があります: ログに記録されたユーザー、DB テーブルを使用した標準認証

$authAdapter = new Zend_Auth_Adapter_DbTable(Zend_Db_Table::getDefaultAdapter()); 
$authAdapter->setTableName('users'); 
$authAdapter->setIdentityColumn('user_name'); 
$authAdapter->setCredentialColumn('password'); 

ユーザーがプロファイルを編集したら、それを Db に保存しますが、ストレージも更新する必要があります (標準の Zend_Auth_Storage_Session を使用)。それを行う簡単な方法はありますか?どうもありがとう。

4

3 に答える 3

8
$user = Zend_Auth::getInstance()->getIdentity();
$user->newValue = 'new value';

データベースを更新しているのと同じステートメントでセッションデータを更新していると仮定すると、データベースを再度呼び出す必要はありません。

于 2008-11-20T13:45:39.217 に答える
5

変更される可能性のある情報を保持するために Zend_Auth のストレージを使用しないことが最善の策です。デフォルトでは、ID のみを保持します (正当な理由により)。おそらく、すべての Auth、ACL (およびおそらくプロファイル) 機能をラップした User クラスを作成し、静的な get_current() メソッドを使用して、セッションに格納されたユーザーをロードします。これにより、セッションに詰め込むときに発生するすべての一貫性の問題が回避されるだけでなく、実際にパフォーマンスの向上が必要な場合にキャッシュを実装する単一のポイントが提供されます。

于 2008-11-20T18:30:30.313 に答える
4

私はこのようにしましたが、うまくいきますが、もっと良い方法がないかどうかはわかりません。

$user_data = User::getUser($user_id)->toArray();
unset($user_data['password']);

$std_user = new stdClass();

foreach ($user_data as $key => $value)
{
   $std_user->$key = $value;
}

$auth = Zend_Auth::getInstance();     
$auth->getStorage()->write($std_user);  
于 2008-11-20T11:50:45.267 に答える