最常用、最安全的方式是通过 user 组件的 identity 属性获取当前登录用户的用户名,需先判断 isguest 再访问 identity->username,确保用户已登录且模型中存在可读的 username 字段或对应 getter 方法。

在 Yii2 中获取当前登录用户的用户名,最常用、最安全的方式是通过 User 组件的 identity 属性。以下是在视图(View)或控制器中获取用户名的几种典型写法,适用于 Yii2.0.50 及后续稳定版本。
在视图文件中直接显示用户名
这是最常见场景,比如在顶部导航栏显示“欢迎,张三”。确保用户已登录,再调用 username 属性:
<?php if (!Yii::$app->user->isGuest): ?>
<p>欢迎,= Yii::$app->user->identity->username ?></p>
<?php endif; ?>
说明:
-
isGuest判断是否为游客(未登录),避免访问空对象报错; -
identity返回当前用户的 UserIdentity 实例(通常是app\models\User); - 默认情况下,
username是User模型中的字段名,如你自定义了字段(如nickname),请替换为对应属性。
在控制器中获取并传递给视图
若需在逻辑中处理用户名(如记录日志、权限判断),可在控制器中提前获取:
public function actionIndex()
{
$username = Yii::$app->user->isGuest ? '游客' : Yii::$app->user->identity->username;
return $this->render('index', [
'username' => $username,
]);
}
然后在视图中直接使用 $username 变量,更清晰且利于测试。
确保 User 模型支持 username 字段
Yii2 默认的 yii\web\User 组件依赖 identityClass 配置,通常指向 app\models\User。请确认该模型中存在可读的 username 属性(或通过 getter 定义):
class User extends \yii\db\ActiveRecord implements \yii\web\IdentityInterface
{
public static function tableName()
{
return '{{%user}}';
}
// 必须实现:返回用户名(用于显示)
public function getUsername()
{
return $this->username; // 或 $this->nickname,按实际字段调整
}
}
注意:IdentityInterface 并不要求必须有 getUsername() 方法,但视图中访问 $user->username 时,PHP 会尝试调用该 getter(如果定义)或直接读取 public 属性。
扩展:获取其他用户信息(邮箱、ID等)
同理,只要模型中有对应字段且可访问,均可直接调用:
-
Yii::$app->user->identity->id—— 用户主键 ID -
Yii::$app->user->identity->email—— 邮箱(需字段存在且可读) -
Yii::$app->user->getId()—— 更推荐的获取 ID 方式(不依赖 identity 实例)
不复杂但容易忽略:始终先判断 isGuest,避免生产环境抛出 Trying to get property of non-object 错误。











