2015-01-09 18 views
17

Wie kann ich den Namen des eingeloggten Benutzers in yii2 bekommen? Ich kann den Benutzer-ID erhalten mitErhalte den Namen des Benutzers in yii2

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

und ich weiß, dass ich den Namen in der Datenbank finden konnte, aber ich möchte einen direkten Weg. Der Name-Spalte in der Datenbank den Namen "username", aber

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

funktioniert nicht und

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

funktioniert auch nicht.

Antwort

26

Bei der Anmeldung werden die Benutzerinformationen in Yii::$app->user->identity Variable gespeichert.

Für weitere Informationen lesen Sie die User Authentication documentation in der offiziellen Anleitung.

4

Während die Antwort von @thepeach funktioniert, können Sie die Benutzerkomponente tatsächlich erweitern und Ihre eigenen Funktionen hinzufügen, so dass Sie sie über Yii::$app->user->something erhalten können, wie Sie es ursprünglich versuchten.

Ich möchte Dinge wie diese von Anfang an erweitern, also bin ich bereit, benutzerdefinierte Funktionalität hinzuzufügen, ohne Code umzuformen. Es nervt, Dinge auf eine Art zu tun, dann müssen Sie zurückgehen und 100 Punkte Code reparieren, weil Sie es später geändert haben.

zunächst eine Benutzerkomponentenklasse in der Config definieren:

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

Dann User.php in Ihrem components Verzeichnis erstellen. Wenn Sie dieses Verzeichnis noch nicht erstellt haben, erstellen Sie es in Ihrem App-Stammverzeichnis.

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

Jetzt können Sie diese durch Yii::$app->user->something zugreifen.

Zum Beispiel setzen diese in einem Ihrer Ansichten und Zugriff auf die Seite in Ihrem Browser:

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

Ich schrieb eine ausführlichere Antwort here, die diese in der Tiefe etwas mehr abdeckt.

+1

Sie könnten einfach '$ this-> identity' anstelle von '\ Yii :: $ app-> user-> identity 'verwenden. – vher2

Verwandte Themen