Yii2-как получить текущее имя пользователя из Yii::$app - >user?
Как вы добавляете или получаете переменные, используя Yii::$app- > user - >something ?
Я не хочу, чтобы они прошли через identity! Я хочу сделать конкретные из них доступными через user!
Например, я хочу получить имя и фамилию текущего зарегистрированного пользователя:
Yii::$app->user->username
Или
Yii::$app->user->name
Уведомление
Я отвечаю на этот вопрос Q & A Style. Это означает, что я отвечаю на свой собственный вопрос. Я уже знаю, как и надеюсь, что это поможет другим получить больше. из Yii2. Я планирую сделать несколько видео-уроков в ближайшее время, и положить некоторые вещи здесь для справки поможет мне быстро получить некоторые из них и сделать.
1 ответ:
В то время как другие темы здесь, на SO, предлагают решение chincy hack, или просто принести его через
Я обычно работаю в" продвинутом "приложении,но я собираюсь просто использовать" базовое " приложение в качестве ссылки для всех. Я предполагаю, что те, кто использует "продвинутое" приложение, знают различия и понимают пространства имен.Yii::$app->user->identity, я собираюсь показать вам, как это сделать правильно. Вы можете подчинить Yii2 своей воле, фактически расширяя все!Аварийный курс пространства имен: в basic, у вас есть
namespace app\path\to. Именно здесь находится файл. Например, у вас есть контактная форма.php находится в корневом каталоге приложенияmodels, поэтому его пространство имен -app\models. В advanced у вас есть несколько приложений (frontend & backend), поэтому корень приложения отличается, поэтому у вас естьfrontendв качестве одного корня приложения иbackendв качестве другого. Каталог models в расширенном приложении находится в "frontend / models", а его пространство имен -frontend\models. -- Таким образом, где бы вы ни увидели "приложение" в пространстве имен, вы можете заменить его наfrontendилиbackendдля "продвинутый" шаблон.
Решение
Во-первых, нам нужно изменить конфигурационный файл нашего приложения, чтобы переопределить класс пользовательского компонента по умолчанию. Я опущу все, что не связано, поэтому вы держите свое
identityClassопределенным, я просто не показываю его. Мы просто добавляем, а не заменяем конфигурацию. Кроме того, там, где я показываюfrontend/something, то же самое можно сделать дляbackend/something. Я просто не собираюсь повторять это снова и снова...Basic (
config/web.php) - или-Advanced (frontend/config/main.php)'components' => [ 'user' => [ 'class' => 'app\components\User', // extend User component ], ],помните: если вы используете расширенный шаблон, замените
appнаfrontendилиbackend!Я также хочу отметить, что вам нужно будет создать каталог "компоненты", если вы этого не сделали. Именно здесь многие люди добавляют свои пользовательские классы. Будь то ваш собственный вспомогательный класс или расширение базового компонента 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 ?>Если все хорошо, и у вас есть значения в таблице user для name и username, они должны быть напечатаны на странице:)
Comments