最常用且安全的方式是通过yii::$app->user->identity->username获取,需先判断isguest避免空对象错误,并用html::encode防止xss;其他字段如id、email同理可得。

在 Yii2.0.54 基础模板中,获取当前登录用户的用户名(即 username 字段),最常用且安全的方式是通过用户组件(Yii::$app->user)访问已认证的用户身份信息。前提是项目已启用用户认证(如使用 yii\web\User 和数据库用户表),且用户已成功登录。
确认用户已登录并获取用户名
在控制器、视图或任意可访问应用实例的地方,使用以下代码:
// 获取当前登录用户的 username(推荐方式) $username = Yii::$app->user->isGuest ? 'Guest' : Yii::$app->user->identity->username;
说明:
-
Yii::$app->user->isGuest判断是否为游客(未登录); -
Yii::$app->user->identity返回IdentityInterface实现类的实例(通常是app\models\User); - 默认基础模板中
User模型的username字段映射数据库的username列,确保该字段存在且可读。
在视图中安全显示用户名
例如在 @app/views/layouts/main.php 的导航栏中显示欢迎信息:
<?php if (!Yii::$app->user->isGuest): ?>
注意:Html::encode() 防止 XSS,务必对输出内容做转义。
扩展:获取其他用户字段(如邮箱、ID)
若需同时获取 ID 或 email,只要模型中定义了对应属性(或数据库字段)即可:
$userId = Yii::$app->user->id; // 用户主键(默认为 id 字段) $email = Yii::$app->user->identity->email ?? 'N/A'; // PHP 7.0+ 空合并操作符防报错
确保 User 模型中已声明 email 属性并正确映射到数据库字段,或在 getIdentity() 返回的对象中可用。
常见问题排查
如果出现 Trying to get property 'username' of non-object 错误,说明 identity 为 null,可能原因:
- 用户未登录(
isGuest === true),但未加判断直接访问identity; -
User模型的findIdentity()方法返回null(如数据库查不到、状态被禁用); -
identityClass配置错误(检查config/web.php中'user' => ['identityClass' => 'app\models\User'])。











