如何在Yii2中添加更多用户身份会话属性?

时间:2014-08-01 11:59:16

标签: php yii yii2

在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);

4 个答案:

答案 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;