Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get the name of the user in yii2

Tags:

php

yii2

How can I get the name of the logged-in-user in yii2? I can get the user-id with

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

and I know that I could find the name in the database but I want a direct way. The name-column in the database has the name "username", but

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

doesn't work and

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

doesn't work either.

like image 961
Patricia Avatar asked Jan 09 '15 10:01

Patricia


People also ask

How to get username in Yii2?

On login the user information will be stored in Yii::$app->user->identity variable.

How to get id from url in Yii2?

Just use $id, provided that the model function has id as a parameter. Yii does some magic behind the scenes. Your existing url would work if your action looks like this: public function actionUpdate($id) { ... }


Video Answer


2 Answers

On login the user information will be stored in Yii::$app->user->identity variable.

For more information have a read through the User Authentication documentation in the official guide.

like image 132
Mr Peach Avatar answered Oct 11 '22 15:10

Mr Peach


While the answer from @thepeach works, you can actually extend the User component and add your own functions, so that you can get them via Yii::$app->user->something as you were initially trying to do.

I like to extend things like this from the start, so I am ready to add custom functionality without having to refactor any code. It sucks to do things one way, then have to go back and fix 100 spots of code, because you changed it later.

First, define a user component class in your config:

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

Then create User.php in your components directory. If you haven't made this directory, create it in your app root.

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

Now you can access these through Yii::$app->user->something.

For example, put this in one of your views and access the page in your browser:

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

I wrote a more detailed answer here, which covers this a bit more in depth.

like image 45
Wade Avatar answered Oct 11 '22 15:10

Wade