最安全推荐方式是Yii::$app->user->identity->username,使用前需判空:Yii::$app->user->isGuest ? null : Yii::$app->user->identity->username;登录事件中应监听EVENT_AFTER_LOGIN并通过$event->identity->username获取。

在 Yii2.0.47 中,获取已登录用户的用户名,最安全、最推荐的方式是通过 Yii::$app->user->identity 访问用户模型实例,再读取其 username 属性。
直接从 user 组件读取用户名
前提是用户已成功登录(即非游客状态),且 identityClass 配置正确(如 app\models\User),且该模型中定义了 username 字段:
-
推荐写法:
Yii::$app->user->identity->username - 使用前建议判空,避免 PHP Notice:
Yii::$app->user->isGuest ? null : Yii::$app->user->identity->username - 不建议重复查库,例如
User::findOne(Yii::$app->user->id)—— 因为identity已是加载好的 AR 实例,直接用即可
在登录事件中获取刚登录的用户名
若需在用户刚完成登录时执行逻辑(如记录日志、发通知),应监听 EVENT_AFTER_LOGIN 事件:
- 事件回调中通过
$event->identity->username获取,此时$event->identity确保非空且已加载 - 比在控制器里手动取
Yii::$app->user->identity更可靠,因为该事件在会话建立后触发,身份状态已稳定 - 避免在事件中依赖
Yii::$app->user->identity,因它可能尚未同步更新(尤其在并发或自定义登录流程中)
确保基础配置正确
上述方式生效的前提是框架配置无误:
-
config/web.php中'user' => ['identityClass' => 'app\models\User']已设置 -
app\models\User实现了IdentityInterface,且包含可读的username属性(数据库字段或 getter 方法) - 登录逻辑调用了
Yii::$app->user->login($user, $duration),完成身份切换
不复杂但容易忽略。


















