Php Yii2-如何从Yii获取当前用户名或名称::$app->;用户?

Php Yii2-如何从Yii获取当前用户名或名称::$app->;用户?,php,yii,yii2,yii2-user,Php,Yii,Yii2,Yii2 User,如何使用Yii::$app->user->something添加或获取变量 我不想让他们通过identity。我想通过用户访问特定的代码 例如,我想获取当前登录用户的用户名和名称: \Yii::$app->user->username 或 虽然这里的其他主题提供了一个chincy黑客解决方案,或者只是通过Yii::$app->user->identity获取它,但我将向您展示如何正确地完成它。通过几乎扩展所有内容,您可以让Yii2服从您的意愿 我通常在“高级”应用程序中工作,但我将

如何使用
Yii::$app->user->something
添加或获取变量

我不想让他们通过
identity
。我想通过
用户
访问特定的代码

例如,我想获取当前登录用户的用户名和名称:

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


虽然这里的其他主题提供了一个chincy黑客解决方案,或者只是通过
Yii::$app->user->identity
获取它,但我将向您展示如何正确地完成它。通过几乎扩展所有内容,您可以让Yii2服从您的意愿

我通常在“高级”应用程序中工作,但我将只使用“基本”应用程序作为每个人的参考。我假设那些使用“高级”应用程序的人知道它们之间的区别并理解名称空间

名称空间速成班:在basic中,您有
名称空间应用程序\path\to
。这是文件所在的位置。例如,ContactForm.php位于app root
models
目录中,因此它的名称空间是
app\models
。在advanced中,您有多个应用程序(前端和后端),因此应用程序根目录不同,因此您将
前端
作为一个应用程序根目录,将
后端
作为另一个应用程序根目录。高级应用程序中的模型目录位于“frontend/models”,其名称空间为
frontend\models
因此,在名称空间中看到“app”的任何地方,都可以将其替换为“高级”模板的
frontend
backend


解决方案 首先,我们需要修改应用程序的配置文件以覆盖默认用户组件的类。我将省略任何不相关的内容,因此您保留您的
identityClass
定义,我只是不显示它。我们只是添加而不是替换配置。另外,在我显示的
frontend/something
中,也可以对
后端/something
执行同样的操作。我只是不打算一遍又一遍地重复

基本(
config/web.php
)或高级(
frontend/config/main.php

请记住:如果您使用的是高级模板,请将
应用程序
替换为
前端
后端

我还想指出,如果还没有创建“components”目录,则需要创建该目录。这是许多人添加自定义类的地方。无论是您自己的助手类,还是扩展基本的Yii组件(例如扩展
Yii\web\Controller

组件
目录中创建一个名为
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;
    }
}

如果一切正常,并且用户表中有name和username的值,则应将它们打印到页面上:)

您的问题的答案是@user3600691-请再次查看。我还回答了它下面的问题,链接到这个页面!每个人的答案使用
标识
。如果你看我在这一页上的答案,我已经知道了怎么做。我正在演示如何
扩展
User
组件,以添加您想要添加的任何内容
Yii::$app->User->whatever
。为什么直接从
Yii::$app->User->identity>获取数据不是正确的方法?缺点是什么?
'components' => [
    'user' => [
        'class' => 'app\components\User', // extend User component
    ],
],
<?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->name ?>
<?= \Yii::$app->user->username ?>