2015-01-09 18 views
17

yii2でログインしているユーザーの名前を取得するにはどうすればよいですか? 私はyii2でユーザーの名前を取得

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

でユーザ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

あなたは '\ Yii :: $ app-> user-> identity'の代わりに' $ this-> identity'を使うことができます。 – vher2

関連する問題