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

时间:2016-07-16 20:34:29

标签: php yii yii2 yii2-user

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

我不想让他们通过{{1}}。我希望通过{{1}}访问特定的内容。

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

{{1}}

{{1}}

1 个答案:

答案 0 :(得分:10)

虽然SO上的其他主题提供了一个chincy hack解决方案,或者只是通过Yii::$app->user->identity获取它,我将向您展示如何正确地完成它。您可以通过虚拟扩展所有内容来弯曲Yii2!

我通常在"高级"应用程序,但我将使用"基本"应用程序作为每个人的参考。我假设那些正在使用"高级"应用程序知道差异并了解名称空间。

命名空间速成课程:基本上,您有namespace app\path\to。这是文件所在的位置。例如,您有位于app根models目录中的ContactForm.php,因此它的名称空间为app\models。在高级版中,您有多个应用(前端和后端),因此应用根不同,因此您将frontend作为一个应用根,将backend作为另一个。{1}}。高级应用程序中的models目录位于" frontend / models"它的名称空间是frontend\models。 - 所以你看到的任何地方" app"在命名空间中,您可以将frontendbackend替换为" advanced"模板。

解决方案

首先,我们需要修改应用程序的配置文件以覆盖默认的用户组件类。我会遗漏任何不相关的内容,所以你保持identityClass的定义,我只是没有表现出来。我们只是添加,而不是替换配置。此外,在我显示frontend/something的位置,backend/something也可以这样做。我不会一遍又一遍地重复......

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

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

请记住:如果您使用的是高级模板,请将app替换为frontendbackend

我还想指出,你需要创建"组件"目录,如果你还没有这样做。这是许多人添加自定义类的地方。无论是您自己的帮助类,还是扩展基础Yii组件(例如扩展yii\web\Controller)。

在名为components的{​​{1}}目录中创建一个新文件。在该文件中,放置以下代码:

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; } } username必须是数据库用户表中的有效列名!

所以现在我们可以在我们的控制器中使用它,在任何地方查看..让我们测试一下。在name中,将其添加到页面底部:

views/site/index.php

如果一切正常,并且您在用户表中有名称和用户名的值,则应将其打印到页面上:)