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

标签 php yii yii2 yii2-user

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

我不想让他们通过 identity .我想通过 user 访问特定的.

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

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

或者
\Yii::$app->user->name

最佳答案

虽然 SO 上的其他主题提供了一个 chincy hack 解决方案,或者只是通过 Yii::$app->user->identity 获取它,我将向您展示如何正确地做到这一点。您可以通过几乎扩展所有内容来使 Yii2 随心所欲!

我通常在“高级”应用程序中工作,但我将只使用“基本”应用程序作为每个人的引用。我假设那些使用“高级”应用程序的人知道差异并理解命名空间。

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

解决方案

首先,我们需要修改我们应用的配置文件以覆盖默认的 User 组件的类。我会遗漏任何不相关的东西,所以你保留你的identityClass定义,我只是没有显示它。我们只是添加而不是替换配置。另外,我展示的地方 frontend/something ,同样可以对 backend/something 进行.我只是不会一遍又一遍地重复......

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

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

请记住:如果您使用的是高级模板,请替换 appfrontendbackend !

我还想指出,如果您还没有创建“components”目录,则需要这样做。这是许多人添加自定义类的地方。无论是你自己的辅助类,还是扩展一个基本的 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必须是数据库用户表中的有效列名!

所以现在我们可以在我们的 Controller 、 View 、任何地方使用它......让我们测试一下。在 views/site/index.php , 将此添加到页面底部:
<?= \Yii::$app->user->name ?>
<?= \Yii::$app->user->username ?>

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

关于php - Yii2 - 如何从 Yii::$app->user 获取当前用户名或名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38415388/

相关文章:

php - 使用 with 语句时,使用 AR findAll 函数只返回一个对象

arrays - 在循环中保存模型 yii

php - 如果未预加载,Yii Bootstrap 将无法工作

PHP运行后台作业无需等待响应非阻塞模式如触发器类型

php - 无法使用 php mysql 创建 TABLE

php - 通过 get 使用唯一 token 是否安全?

php - liip_imagine with vich_uploader 不创建缓存

php - 通过 ajax 向 Controller 发送请求,从命名空间中删除斜杠?

database - Yii2 + Redis 作为数据库

php - Magento 1.6.2 无法重新索引产品平面数据