2015-01-09 72 views
17

如何獲取yii2中登錄用戶的名稱? 我可以得到用戶ID與在yii2中獲取用戶名稱

Yii::$app->user->id; 

,我知道我可以在數據庫中找到名字,但我希望有一個直接的方式。 在數據庫中的名稱列的名稱爲「用戶名」,但

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

不工作,

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

也不起作用。

回答

26

登錄時,用戶信息將被存儲在Yii::$app->user->identity變量中。

欲瞭解更多信息,請閱讀官方指南中的User Authentication documentation

4

雖然@thepeach的答案有效,但您實際上可以擴展用戶組件並添加自己的函數,以便您可以像最初嘗試的那樣通過Yii::$app->user->something獲取它們。

我喜歡從一開始就這樣擴展,所以我準備好添加自定義功能而不必重構任何代碼。它不願意以某種方式做事,然後必須返回並修復100個代碼點,因爲稍後您會更改它。

首先,在你的配置定義用戶組件類:

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

然後在你的components目錄中創建User.php。如果您還沒有創建該目錄,請在您的應用程序根目錄中創建它。

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; 
    } 
} 

現在,你可以通過Yii::$app->user->something訪問這些。

例如,把這個在您的意見之一,在您的瀏覽器訪問網頁:

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

我寫了一個更詳細的回答here,覆蓋這多一點的深度。

+1

您可以使用'$ this-> identity'而不是'\ Yii :: $ app-> user-> identity'。 – vher2