在Yii2中,您可以使用\ yii \ web \ User类中的identityInterface对象访问当前用户的身份界面
\Yii::$app->user->identity->id;
有没有办法获取和设置其他参数(不扩展标识类)?
基本上相当于getState()
中的Yii 1.x setState()
和CWebUser
方法来存储和检索此类会话信息
Yii::app()->user->setState("some_attribute",$value);
Yii::app()->user->getState('some_attribute',$defaultValue);
答案 0 :(得分:23)
好吧,这似乎是故意删除,以避免“混乱”。见https://github.com/yiisoft/yii2/issues/167。所以通过直接调用会话类来实现此目的的唯一方法。
\Yii::$app->session->set('user.attribute',$value);
\Yii::$app->session->get('user.some_attribute');
因为它现在直接存储在没有前缀的会话中,所以最好使用user.xxxx
之类的标识符对键进行命名,以避免与应用程序的不同点处的某些其他键集冲突。
答案 1 :(得分:10)
向用户添加属性的最佳方法是在用户类中创建公共属性。
class Yiidentity extends ActiveRecord implements \yii\web\IdentityInterface{
public $awesomeAttribute = "foo";
}
使用方法:
Yii::$app->user->identity->awesomeAttribute;
答案 2 :(得分:7)
在Yii2中 \ Yii :: $ app-> user-> identity 包含identityClass的实例。所以,如果你想要一些与identityClass相关的数据 - 就像使用identityClass的实例一样。
答案 3 :(得分:1)
您还可以使用 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;