在 Yii2.0.44 中获取当前登录用户名应通过 Yii::$app->user->identity->username ?? 'guest',前提是 user 组件 identityClass 配置正确且用户模型实现 IdentityInterface。

在 Yii2.0.44 中获取当前登录用户名,核心是通过 Yii::$app->user 组件访问已认证的用户实体,而不是重新查数据库。只要用户已成功登录且 identityClass 配置正确,就能安全、高效地拿到用户名。
确认 user 组件已正确配置
检查 config/web.php(或 main.php)中 components['user'] 的设置:
-
identityClass必须指向你实际的用户模型类(如app\models\User) -
enableAutoLogin可设为true(支持记住我),不影响基础用户名获取 - 确保该用户模型实现了
IdentityInterface,且username是其公开属性或有对应 getter
直接获取用户名(推荐写法)
在控制器、视图或服务类中,使用以下代码即可:
$username = Yii::$app->user->identity->username ?? 'guest';
说明:
-
Yii::$app->user->identity返回的就是登录时加载的用户模型实例(如UserAR 对象) - 不建议再用
User::findOne(Yii::$app->user->id),属于冗余查询 -
?? 'guest'是防御性写法,避免未登录时调用->username报错
安全前提:先判断是否已登录
在取用户名前,应明确当前是否处于登录态,尤其在视图中显示欢迎信息时:
<?php if (!Yii::$app->user->isGuest): ?>
<span>欢迎,<?= Yii::$app->user->identity->username ?></span>
<?php else: ?>
<a href="https://www.php.cn/link/08bb42a242d535b301a9e371140822a4'site/login']) ?>">请登录</a>
<?php endif; ?>
注意:isGuest === true 表示未登录,此时 identity 为 null,直接访问会报错。
扩展:同时获取 ID 和其他字段
既然拿到了 identity 实例,就可以一并读取其他用户属性:
-
Yii::$app->user->identity->id—— 用户主键 -
Yii::$app->user->identity->email—— 假设模型中有 email 字段 -
Yii::$app->user->identity->getDisplayName()—— 若定义了自定义 getter 方法
所有字段都来自同一个已加载对象,无需额外查询。


















