簡體   English   中英

Yii2 - 如何從Yii :: $ app-> user獲取當前用戶名或名稱?

[英]Yii2 - How to get the current username or name from Yii::$app->user?

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

我不想讓他們通過identity 我想通過user訪問特定的。

例如,我想獲取當前登錄用戶的用戶名和名稱:

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

要么

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

雖然SO上的其他主題提供了一個chincy hack解決方案,或者只是通過Yii::$app->user->identity獲取它,我將向您展示如何正確地完成它。 您可以通過虛擬擴展所有內容來彎曲Yii2!

我通常在“高級”應用程序中工作,但我將使用“基本”應用程序作為每個人的參考。 我假設那些使用“高級”應用程序的人知道差異並理解命名空間。

命名空間崩潰課程:基本上,你有namespace app\\path\\to 這是文件所在的位置。 例如,您有位於app根models目錄中的ContactForm.php,因此它的命名空間是app\\models 在高級版中,您有多個應用程序(前端和后端),因此應用程序根目錄不同,因此您將frontend作為一個應用程序根目錄,將backend作為另一個應用程序根目錄。 高級應用程序中的models目錄位於“frontend / models”,它的命名空間是frontend\\models - 因此,無論您在命名空間中看到“app”,都可以將其替換為“高級”模板的frontendbackend


首先,我們需要修改app的配置文件以覆蓋默認的User組件類。 我會遺漏任何不相關的東西,所以你保持你的identityClass定義,我只是沒有顯示它。 我們只是添加,而不是替換配置。 此外,在我展示frontend/somethingbackend/something也可以這樣做。 我不會一遍又一遍地重復......

Basic( config/web.php ) - 或 - Advanced( frontend/config/main.php

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

請記住:如果您使用的是高級模板,請將app替換為frontendbackend

我還想指出,如果你還沒有這樣做,你需要創建“組件”目錄。 這是許多人添加自定義類的地方。 無論是您自己的幫助類,還是擴展基礎Yii組件(例如擴展yii\\web\\Controller )。

在名為User.phpcomponents目錄中創建一個新文件。 在該文件中,放置以下代碼:

<?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 ?>

如果一切正常,並且您在用戶表中有名稱和用戶名的值,則應將它們打印到頁面上:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM