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



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



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



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



Yii::$app->user->username


Или



Yii::$app->user->name




Уведомление



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

914   1  

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

    Ничего не найдено.