Yii2 – Как получить текущее имя пользователя или имя от пользователя Yii :: $ app->?

Как вы добавляете или получаете переменные, используя Yii :: $ app-> user-> что-то?

Я НЕ хочу получать их через identity ! Я хочу сделать конкретные доступными через user !

Например, я хочу получить текущее имя пользователя и имя пользователя:

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

или

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

УВЕДОМЛЕНИЕ

Я отвечаю на этот вопрос Q & A Style . Это означает, что я отвечаю на свой вопрос. Я уже знаю, как и надеюсь, что это поможет другим получить больше от Yii2. Я планирую сделать несколько видеоуроков в ближайшее время, и некоторые вещи, приведенные здесь для справки, помогут мне быстро получить немного и сделать.

В то время как другие темы здесь, на SO, предлагают решение chincy hack, или просто получить его через Yii::$app->user->identity , я покажу вам, как это сделать правильно. Вы можете сгибать Yii2 по своему желанию, фактически расширяя все!

Обычно я работаю в «расширенном» приложении, но я просто использую «основное» приложение в качестве ссылки для всех. Я предполагаю, что те, кто использует «продвинутое» приложение, знают различия и понимают пространства имен.

Namespace Crash Course: в основном у вас есть namespace app\path\to . Здесь находится файл. Например, у вас есть ContactForm.php, расположенный в каталоге корневых файлов приложения, поэтому это пространство имен – это app\models . В расширенном режиме у вас есть несколько приложений (frontend & backend), поэтому корень приложения отличается, поэтому у вас есть frontend как один корень приложения, а backend как другой. Каталог моделей в расширенном приложении находится в «frontend / models», а пространство имен – frontend\models . – Поэтому везде, где вы видите «приложение» в пространстве имен, вы можете заменить его frontend или backend для «продвинутого» шаблона.


Решение

Во-первых, нам нужно изменить конфигурационный файл нашего приложения, чтобы переопределить класс компонента User по умолчанию. Я оставлю все, что не связано, поэтому вы определяете свой identityClass код, я просто не показываю его. Мы просто добавляем, не заменяя конфигурацию. Кроме того, где я показываю frontend/something , то же самое можно сделать для backend/something . Я просто не повторяюсь снова и снова …

Basic ( config/web.php ) config/web.php Advanced ( frontend/config/main.php )

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

Помните: если вы используете расширенный шаблон, замените app frontend или backend !

Я также хочу отметить, что вам нужно будет создать каталог «components», если вы этого еще не сделали. Это – то, где многие люди добавляют свои собственные Классы. Является ли это вашим собственным вспомогательным классом или расширяет базовый компонент Yii (например, расширение yii\web\Controller ).

Создайте новый файл в каталоге components именем 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; } } 

Примечание: username и name должны быть действительными именами столбцов в пользовательской таблице вашей базы данных!

Итак, теперь мы можем использовать это в нашем контроллере, просматривать, где угодно. Давайте проверим его. В views/site/index.php добавьте это в нижнюю часть страницы:

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

Если все хорошо, и у вас есть значения в таблице пользователя для имени и имени пользователя, они должны быть напечатаны на странице 🙂