[英]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”,都可以將其替換為“高級”模板的frontend
或backend
。
首先,我們需要修改app的配置文件以覆蓋默認的User組件類。 我會遺漏任何不相關的東西,所以你保持你的identityClass
定義,我只是沒有顯示它。 我們只是添加,而不是替換配置。 此外,在我展示frontend/something
, backend/something
也可以這樣做。 我不會一遍又一遍地重復......
Basic( config/web.php
) - 或 - Advanced( frontend/config/main.php
)
'components' => [
'user' => [
'class' => 'app\components\User', // extend User component
],
],
請記住:如果您使用的是高級模板,請將app
替換為frontend
或backend
!
我還想指出,如果你還沒有這樣做,你需要創建“組件”目錄。 這是許多人添加自定義類的地方。 無論是您自己的幫助類,還是擴展基礎Yii組件(例如擴展yii\\web\\Controller
)。
在名為User.php
的components
目錄中創建一個新文件。 在該文件中,放置以下代碼:
<?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
,將其添加到頁面底部:
<?= \Yii::$app->user->name ?>
<?= \Yii::$app->user->username ?>
如果一切正常,並且您在用戶表中有名稱和用戶名的值,則應將它們打印到頁面上:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.