在 yii2.0.52 中,获取当前登录用户的用户名需通过 yii::$app->user->identity->username,前提是用户模型实现 identityinterface 且含 username 属性;未登录时 identity 为 null,须用 isguest 判断。

在 Yii2.0.52 中,获取当前登录用户的用户名,核心是通过 Yii::$app->user->identity 访问已认证的用户实体,再读取其对应属性(如 username)。前提是你的用户模型已正确实现 IdentityInterface,且字段名确实是 username。
确认用户模型实现了 IdentityInterface
你的用户类(例如 app\models\User)必须实现 yii\web\IdentityInterface,并确保以下方法可用:
-
findIdentity($id):支持根据 ID 查出用户记录 -
getId():返回主键字段(通常是$this->id) - 模型中需包含可公开访问的
username属性(数据库字段或 getter 方法)
直接获取用户名的写法
在控制器、视图或服务中,只要用户已登录,就可以安全使用:
$username = Yii::$app->user->identity->username;
更稳妥的做法是加空值判断,避免未登录时调用失败:
if (!Yii::$app->user->isGuest) {<br> $username = Yii::$app->user->identity->username;<br>} else {<br> $username = '访客';<br>}
常见问题与注意事项
-
报错 “Trying to get property of non-object”:说明
Yii::$app->user->identity为null,通常因用户未登录,或findIdentity()返回了null(比如用户被删除、ID 不匹配) -
字段名不是
username:若数据库中存的是user_name或nickname,请改用对应属性名,或在模型中添加getUsername()方法统一返回 -
敏感信息不建议直接暴露:生产环境若需展示昵称/姓名,建议优先读取
nickname或realname字段,而非强制依赖username
扩展:获取其他常用用户信息
同理,你也可以一次性拿到完整用户对象,复用更多字段:
$user = Yii::$app->user->identity;<br>if ($user !== null) {<br> echo $user->username;<br> echo $user->email;<br> echo $user->id;<br> // 注意:不要重复查库,$user 就是 AR 实例,可直接访问所有属性<br>}










