Yii 2-如何从Yii::$app->user中获取当前用户名?

xfb7svmp  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(169)

如何使用Yii::$app->user->something添加或获取变量?
我不想让它们通过identity。我想让特定的可以通过user访问。
例如,我想获得当前登录用户的用户名和姓名:

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

\Yii::$app->user->name
7ivaypg9

7ivaypg91#

虽然SO上的其他主题提供了一个中国式的黑客解决方案,或者简单地通过Yii::$app->user->identity来获取它,但我将向你展示如何正确地做到这一点。你可以通过几乎扩展一切来使Yii 2屈服于你的意志!
我通常在“高级”应用程序中工作,但我将只使用“基本”应用程序作为每个人的参考。我假设那些使用“高级”应用程序的人知道差异,并了解名称空间。

**命名空间崩溃教程:**在basic中,你有namespace app\path\to。这是文件所在的位置。例如,你有ContactForm.php位于应用根目录models,所以它的命名空间是app\models。在advanced中,你有多个应用(前端和后端),所以应用根目录是不同的,所以你有frontend作为一个应用根目录,backend作为另一个应用根目录。在advanced应用中,models目录位于“frontend/models”,它的命名空间是frontend\models。--所以在命名空间中的任何地方你看到“app”,你可以用frontendbackend替换它作为“advanced”模板。

溶液

首先,我们需要修改应用的配置文件,以覆盖默认的User组件的类。我将省略任何不相关的内容,因此您可以保留定义的identityClass,我只是不显示它。我们只是添加,而不是替换配置。另外,在显示frontend/something的地方,同样的道理也可以用在X1 M11 N1 X上。我只是不打算一遍又一遍地重复这两个...
基本(config/web.php)或高级(frontend/config/main.php

'components' => [
    'user' => [
        'class' => 'app\components\User', // extend User component
    ],
],
  • 请记住:如果您使用的是高级模板,请将app替换为frontendbackend!*

我还想指出的是,如果你还没有创建“components”目录的话,你需要创建这个目录。这是很多人添加自定义类的地方。无论是你自己的helper类,还是扩展一个基本的Yii组件(比如扩展yii\web\Controller)。
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;
    }
}
  • 注意:usernamename必须是数据库用户表中的有效列名!*

现在我们可以在控制器、视图、任何地方使用它。让我们来测试一下。在views/site/index.php中,将以下代码添加到页面底部:

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

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

相关问题