我在我的应用程序中使用了dektrium/yii2-user。
在 vendor / dektrium 的 User.php 中有一个名为getID()
的方法,Yii::$app->user->getID()
可以访问此方法并返回{{1登录用户。
但是,还有另一种名为id
的方法,其功能是返回当前登录用户的完整配置文件详细信息。但是,这种方法会产生500内部服务器错误。
getProfile()
我用谷歌搜索了这个问题但没有发现任何事情......帮助我的人们......
答案 0 :(得分:6)
我相信您可以像这样获取当前登录用户的个人资料:
Yii::$app->user->identity->profile;
因为Yii::$app->user->identity
返回当前用户 - User
对象。
您将Yii的Web用户对象与用户模型混淆:)
编辑:
Yii::$app->user
指的是yii\web\User
- 管理用户身份验证状态的应用程序组件。
您要求用户组件获取“身份”,即:
IdentityInterface是应由提供身份信息的类实现的接口
在这种情况下,Dektrium用户模型实现了IdentityInterface
,您可以在其上调用getId
并获取用户模型的ID。
class User extends ActiveRecord implements IdentityInterface
此代码:
Yii::$app->user->identity->profile;
将返回与Profile
User
模型数据
您可以直接访问它的字段:
Yii::$app->user->identity->profile->location;
有关详细信息,请参阅dektrium\user\models\Profile
。
人们总是对yii \ web \ User,IdentityInterface和User模型感到困惑。 我自己包括:p
答案 1 :(得分:1)
如果您有一个用户实例( $ user ),您可以使用 getProfile ()函数:
$profile = $user->getProfile()->one();
它返回该用户的个人资料记录。
如果您没有用户实例,但ID( $ user_id ),则可以直接获取Profile模型的实例:
$profile = Profile::find()->where(['user_id' => $user_id)->one();
Yii::$app->user
是应用中定义的用户模型的接口(在本例中为dektrium用户模型):http://www.yiiframework.com/doc-2.0/yii-web-user.html
总结:
$user_id = Yii::$app->user->getID();
$profile = Profile::find()->where(['user_id' => $user_id)->one();
答案 2 :(得分:0)
试试这个
\app\models\User::findOne(Yii::$app->user->identity->id)->profile;