在 yii2 中获取用户的名称

2022-08-30 15:09:27

如何在 yii2 中获取登录用户的名称?我可以获取用户 ID

Yii::$app->user->id;

我知道我可以在数据库中找到这个名字,但我想要一个直接的方式。数据库中的名称列具有名称“用户名”,但是

Yii::$app->user->username;

不起作用,并且

Yii::$app->user->name;     

也不起作用。


答案 1

登录后,用户信息将存储在变量中。Yii::$app->user->identity

有关详细信息,请通读官方指南中的用户身份验证文档


答案 2

虽然@thepeach的答案有效,但您实际上可以扩展User组件并添加自己的函数,以便您可以像最初尝试的那样通过它们。Yii::$app->user->something

我喜欢从一开始就扩展这样的东西,所以我已经准备好添加自定义功能,而不必重构任何代码。以一种方式做事很糟糕,然后必须返回并修复100个代码点,因为你后来改变了它。

首先,在配置中定义一个用户组件类:

'components' => [
    'user' => [
        'class' => 'app\components\User', // extend User component
    ],
],

然后在您的目录中创建。如果尚未创建此目录,请在应用根目录中创建它。User.phpcomponents

用户.php

<?php
namespace app\components;

use Yii;

/**
 * Extended yii\web\User
 *
 * This allows us to do "Yii::$app->user->something" by adding getters
 * like "public function getSomething()"
 *
 * So we can use variables and functions directly in `Yii::$app->user`
 */
class User extends \yii\web\User
{
    public function getUsername()
    {
        return \Yii::$app->user->identity->username;
    }

    public function getName()
    {
        return \Yii::$app->user->identity->name;
    }
}

现在,您可以通过 访问这些内容。Yii::$app->user->something

例如,将以下内容放在您的某个视图中,然后在浏览器中访问该页面:

<?= \Yii::$app->user->username ?>

我在这里写了一个更详细的答案,它更深入地介绍了这一点。


推荐