Что происходит «под капотом» при вызове Laravel: Auth::user()->id? Пытаюсь разобраться с ларавел. Настроен крайне позитивно. Стоически подавляю желание написать весь проект на богопротивном codeigniter за два дня.
Мозги пухнут от фасадов, сервис-провайдеров и прочей х…..прогрессивной штуки. Есть ощущение, что мне это не дано, но попробовать хочется.
Итак, Laravel: Auth::user()->id . Все советуют : пишите так и обрящете id пользователя. Но хотелось бы понять откуда что берется. На первый взгляд вызывается статический метод user() класса Auth, который возвращает некий объект у которого есть свойство id. На второй взгляд Auth это фасад. Хорошо, не витрина. Ок , пытаемся понять откуда все-таки берется метод user() и свойство id.
Открываем vendor\laravel\framework\src\Illuminate\Support\Facades\Auth.php
protected static function getFacadeAccessor()
{
return 'auth';
}
идем в vendor\laravel\framework\src\Illuminate\Auth находим в нем сервис провайдер (опять страшные словечки!)
vendor\laravel\framework\src\Illuminate\Auth\AuthServiceProvider.php
в нем метод register()
видим такого зверя - $this->registerAuthenticator();
protected function registerAuthenticator()
{
$this->app->singleton('auth', function ($app) {
$app['auth.loaded'] = true;
return new AuthManager($app);
});
значит AuthManager это класс, который нам нужен. Это также , гласит таблица соответствий фасадов Laravel и классов, лежащих в их основе. Illuminate\Auth\AuthManager - auth
Но, как оказалось, класс AuthManager не предоставляет метод user() .. , ничего подобного. Никакого метода user() там нет. Так откуда берется пресловутый user() . Что за объект он нам возвращает ? Сколько еще ползать по коду , чтобы понять что к чему?
ХХХ….р.р..б.б!
Спасибо за камменты.

21 Авг 2019 в 07:03
213 +1
0
Ответы
1

Попробую разъяснить вам, как работает Auth::user()->id в Laravel.

Когда вы вызываете Auth::user(), Laravel внутри использует фасад Auth, который в свою очередь обращается к сервис-провайдеру для получения экземпляра AuthManager. AuthManager будет ответственным за управление аутентификацией и авторизацией в вашем приложении.

Сам по себе класс AuthManager не имеет метода user(). Но когда вы вызываете Auth::user(), Laravel использует "магию" метода __call у фасада, чтобы вызвать метод user() на экземпляре AuthManager.

Метод user() возвращает текущего аутентифицированного пользователя. Затем, когда вы обращаетесь к свойству id, Laravel обращается к свойству id этого пользователя и возвращает его идентификатор.

Таким образом, через цепочку вызовов Laravel позволяет вам удобно получать информацию о текущем пользователе вашего приложения.

Надеюсь, это поможет вам разобраться с тем, что происходит "под капотом" при вызове Auth::user()->id в Laravel. И не расстраивайтесь, разбираться с фреймворком может быть сложно в начале, но со временем все должно стать более понятным. Удачи!

20 Апр 2024 в 13:08
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 96 340 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир