我是Yii框架的新手,我想获取当前登录用户的用户详细信息,例如userid,username&他的头像,并希望在head标签中添加该数据。我在Yii上使用基本版本。
我如何获得这些详细信息?
答案 0 :(得分:0)
Yii使用IdentityInterface处理会话中的用户数据。 让我们一步一步走。
您可以创建一个类,称之为User,它实现IdentityInterface。如果与数据库连接,您可以将其扩展到ActiveRecord,完全取决于您的架构。
class User extends ActiveRecord implements IdentityInterface
{
...
}
将配置详细信息添加到配置文件main.php中。我在高级模板上工作,因此它位于fronted / config。检查它是否为基本的。
'components' => [
...
'user' => [
'identityClass' => 'common\models\User',
'enableAutoLogin' => true,
'identityCookie' => ['name' => '_identity-frontend', 'httpOnly' => true],
],
....
];
这告诉应用程序从公共\ model \ User类获取用户会话详细信息。它的共同之处在于我对后端和前端使用相同的类,而基本模板则不然。
让用户登录应用
当您获得User类的对象时,使用有效的用户名和密码,请使用以下代码登录用户。
Yii::$app->user->login($user);
获取您拥有以下样本
的用户的值Yii :: $ app-> user-> isGuest - 这会告诉您用户是否已登录。
Yii :: $ app-> user-> id - 获取用户的ID
Yii :: $ app-> user-> identity-> name - Yii::$app->user->identity
将允许您访问User类的整个对象。如果您有任何其他属性,请使用标识并获取它们。例如,你可以拥有存储头像网址的“头像”,你可以通过Yii::$app->user->identity->avatar
获得它。
最后注销
Yii::$app->user->logout();
答案 1 :(得分:-1)
嗨使用setState
方法。
在UserIdentity.php
public function authenticate()
{
$user=User::model()->find('LOWER(username)=?',array(strtolower($this->username)));
if($user===null)
$this->errorCode=self::ERROR_USERNAME_INVALID;
else if(!$user->validatePassword($this->password))
$this->errorCode=self::ERROR_PASSWORD_INVALID;
else
{
$this->_id=$user->id;
$this->username=$user->username;
$this->setState("userid",$user->user_id);// set States like this
$this->setState("username",$user->username);
$this->setState("avatar",$user->avatar );
$this->errorCode=self::ERROR_NONE;
}
return $this->errorCode;
}
现在可以在任何地方获得这些
$userid = Yii::app()->user->getState('userid');