直接从 Yii::$app->user->identity 获取用户名,无需重复查库;若 identity 为 null 则返回空字符串,需确保 User 模型中 name 字段存在且可访问。

在 Yii2 中获取当前用户名,不推荐重复查库(如 User::findOne(Yii::$app->user->id)),而是直接从用户认证组件中提取已加载的用户实体。Yii2.0.47 版本延续了这一设计逻辑,且 identity 属性默认就是完整加载的 User 模型实例。
直接读取用户实体的 name 字段
Yii::$app->user->identity 返回的是配置中 identityClass 对应的模型对象(默认是 app\models\User),它已经包含数据库中该用户的全部字段(前提是登录时已完整加载)。
$user = Yii::$app->user->identity;
if ($user !== null) {
echo $user->name; // 假设 User 模型有 name 字段
}若 name 字段名不统一(比如叫 username 或 real_name),请按实际模型属性调整。
封装成公共方法(推荐放在基控制器或工具类中)
例如,在 common/components/Helper.php 中添加:
<?php
namespace common\components;
use Yii;
class Helper
{
/**
* 获取当前登录用户名,安全返回空字符串(未登录时)
*/
public static function getCurrentUserName()
{
$user = Yii::$app->user->identity;
return $user ? $user->name : '';
}
/**
* 获取当前用户ID(整型),未登录返回 null
*/
public static function getCurrentUserId()
{
return Yii::$app->user->id ?: null;
}
}使用时:
echo \common\components\Helper::getCurrentUserName();
注意事项
- 确保
User::className()对应的模型中name字段可安全访问(非 null、已定义 getter 或数据库存在) - 若
identity仅部分加载(比如登录时只 select id、username),需检查findIdentity()方法是否完整查询了所需字段 - 登录态失效或游客访问时,
Yii::$app->user->identity为null,务必判空,避免Trying to get property 'name' of non-object错误
不复杂但容易忽略


















