coderisimo
@coderisimo

Что происходит «под капотом» при вызове 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() . Что за объект он нам возвращает ? Сколько еще ползать по коду , чтобы понять что к чему?

ХХХ….р.р..б.б!

Спасибо за камменты.
  • Вопрос задан
  • 1131 просмотр
Решения вопроса 1
JhaoDa
@JhaoDa
LaravelRUS Team
AuthManager управляет драйверами (guard), которые и предоставляют метод user(). Найдите в менеджере метод __call и увидите, что он проксирует вызовы несуществующих методов в драйвер.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Sanasol
@Sanasol Куратор тега Laravel
нельзя просто так взять и загуглить ошибку
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы