web-dev-qa-db-fra.com

Obtenir le nom de l'utilisateur dans yii2

Comment obtenir le nom de l'utilisateur connecté dans yii2? Je peux obtenir l'identifiant de l'utilisateur avec

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

et je sais que je pourrais trouver le nom dans la base de données mais je veux un moyen direct . La colonne de nom dans la base de données porte le nom "nom d'utilisateur" 

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

ne fonctionne pas et

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

ne fonctionne pas non plus.

22
Patricia Beier

Lors de la connexion, les informations utilisateur seront stockées dans la variable Yii::$app->user->identity.

Pour plus d'informations, consultez la Documentation relative à l'authentification de l'utilisateur dans le guide officiel.

40
Mr Peach

Tandis que la réponse de @thepeach fonctionne, vous pouvez réellement étendre le composant User et ajouter vos propres fonctions, de sorte que vous puissiez les obtenir via Yii::$app->user->something comme vous l'aviez initialement tenté.

J'aime prolonger ce genre de choses dès le début, je suis donc prêt à ajouter des fonctionnalités personnalisées sans avoir à refactoriser le code. C'est chiant de faire les choses dans un sens, puis de revenir en arrière et de réparer 100 tâches de code, car vous les avez modifiées plus tard.

Tout d’abord, définissez une classe de composant utilisateur dans votre configuration:

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

Ensuite, créez User.php dans votre répertoire components. Si vous n'avez pas créé ce répertoire, créez-le à la racine de votre application.

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

Vous pouvez maintenant y accéder via Yii::$app->user->something.

Par exemple, placez-le dans l'une de vos vues et accédez à la page de votre navigateur:

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

J'ai écrit une réponse plus détaillée ici , qui couvre ceci un peu plus en profondeur.

7
Wade

Facile, il suffit d'utiliser:

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