質問
YII2では、\ yii \ web \ userクラス内からIdentityInterfaceオブジェクトを使用して、この
のようなものであるIdentityInterfaceオブジェクトを使用して、現在のユーザーのIDインターフェイスにアクセスできます。 \Yii::$app->user->identity->id;
.
追加のパラメータを取得および設定する方法はあります(IDクラスを拡張せずに)?
基本的には、この
のようなセッション情報を格納および取得するためのgetState()
のYII 1.x setState()
とCWebUser
メソッド
Yii::app()->user->setState("some_attribute",$value);
Yii::app()->user->getState('some_attribute',$defaultValue);
. 解決
大丈夫「混乱」を避けるために意図的に取り除かれたようです。 https://github.com/yiisoft/yii2/issues/167 。そのため、セッションクラスを直接呼び出すことによってこれを行う唯一の方法。
\Yii::$app->session->set('user.attribute',$value);
\Yii::$app->session->get('user.some_attribute');
.
プレフィックスなしでセッションに直接保存されているため、アプリケーションの異なるポイントにある他のキーセットとの衝突を避けるために、user.xxxx
のような識別子を持つキーをネームスペースするのに最適です。
他のヒント
ユーザーに属性を追加するための最良の方法は、ユーザークラスにパブリック属性を作成しています。
class Yiidentity extends ActiveRecord implements \yii\web\IdentityInterface{
public $awesomeAttribute = "foo";
}
.
使い方:
Yii::$app->user->identity->awesomeAttribute;
. \ yii :: $ app-> user-> identity には、IdentityClassのインスタンスが含まれています。したがって、識別クラス関連のデータが必要な場合は、IdentityClassのインスタンスのように使用するだけです。
getter 関数を使用して、ユーザーの追加の識別情報を含めることもできます。たとえば、プロファイルテーブルからfullname
を取得します。
class User extends ActiveRecord implements \yii\web\IdentityInterface
{
// Other code goes here...
public function getFullname()
{
$profile = Profile::find()->where(['user_id'=>$this->id])->one();
if ($profile !==null)
return $profile->fullname;
return false;
}
}
.
その後、
のように、fullname
という名前の属性があるかのように使用できます。
Yii::$app->user->identity->fullname;
. 所属していません StackOverflow