web-dev-qa-db-ja.com

yii2でユーザーの名前を取得する

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

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

データベースで名前を見つけることができることは知っていますが、直接的な方法が必要です。データベースの名前列の名前は「username」ですが、

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

動作せず、

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

動作しません。

24
Patricia

ログインすると、ユーザー情報はYii::$app->user->identity変数に保存されます。

詳細については、公式ガイドの ser Authentication documentation をお読みください。

42
Mr Peach

@thepeachからの答えは機能しますが、実際にUserコンポーネントを拡張し、独自の関数を追加して、最初にしようとしていたように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からこれらにアクセスできます。

たとえば、これをビューの1つに配置して、ブラウザーのページにアクセスします。

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

私はより詳細な答えを書いた here 、これはもう少し深くカバーしています。

7
Wade

簡単、使用するだけ:

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