Что происходит «под капотом» при вызове 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
229 +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
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир