在yii2中获取用户的名称

Pat*_*cia 25 php yii2

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

Yii::$app->user->id;
Run Code Online (Sandbox Code Playgroud)

我知道我可以在数据库中找到这个名字,但我想要一个直接的方法.数据库中的name-column名称为"username",但是

Yii::$app->user->username;
Run Code Online (Sandbox Code Playgroud)

不起作用

Yii::$app->user->name;     
Run Code Online (Sandbox Code Playgroud)

也不起作用.

Mr *_*ach 44

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

有关更多信息,请阅读官方指南中的用户身份验证文档.


Wad*_*ade 8

虽然@thepeach的答案有效,但您实际上可以扩展用户组件并添加自己的功能,以便您可以Yii::$app->user->something像最初尝试的那样获取它们.

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

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

'components' => [
    'user' => [
        'class' => 'app\components\User', // extend User component
    ],
],
Run Code Online (Sandbox Code Playgroud)

然后User.php在您的components目录中创建.如果您尚未创建此目录,请在您的应用程序根目录中创建它.

user.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;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在您可以通过访问这些Yii::$app->user->something.

例如,将其放在您的一个视图中并访问浏览器中的页面:

<?= \Yii::$app->user->username ?>
Run Code Online (Sandbox Code Playgroud)

在这里写了一个更详细的答案,深入探讨了这个问题.


riz*_*sky 5

简单,只需使用:

<?= \Yii::$app->user->identity->username ?>
Run Code Online (Sandbox Code Playgroud)