Подключение фасада.
Т.к. фасад Auth имеет алиас (псевдоним) прописанный в файле config\app.php, подключить данный фасад можно так:
use Auth;или использовать другое имя (алиас), если задать его в массиве aliases данного файла.
Конечно, можно обратиться к классу фасада напрямую, не используя алиас:
use Illuminate\Support\Facades\Auth;
Например, в действии контроллера, нам потребовалось получить данные текущего, аутентифицированного (залогиненного) пользователя:
$user = Auth::user();для анализа, выведем объект User со всеми данными на экран используя функцию Laravel dump():
dump($user);

тут мы можем посмотреть данные, в т.ч. из базы данных, по текущему пользователю.
Но как происходит вызов методов фасада Auth, в данном случае user() и других? Если открыть код данного фасада, то увидим, что данного метода там нет:
class Auth extends Facade { protected static function getFacadeAccessor() { return 'auth'; } public static function routes() { static::$app->make('router')->auth(); } }об этом я и "расскажу".
При начальной загрузке приложения, вызываются методы register() классов провайдеров данных, указанных в массиве providers файла config\app.php:
'providers' => [ /* * Laravel Framework Service Providers... */ Illuminate\Auth\AuthServiceProvider::class, …
Данные методы регистрируют объекты классов к которым они относятся в глобальном объекте app.
В нашем случае метод register() класса AuthServiceProvider:
public function register() { $this->registerAuthenticator(); $this->registerUserResolver(); $this->registerAccessGate(); $this->registerRequestRebindHandler(); }
В первой строчке вызывается метод registerAuthenticator():
protected function registerAuthenticator() { $this->app->singleton('auth', function ($app) { $app['auth.loaded'] = true; return new AuthManager($app); }); $this->app->singleton('auth.driver', function ($app) { return $app['auth']->guard(); }); }
который и создает объект класса AuthManager (файл vendor\laravel\framework\src\Illuminate\Auth\AuthManager.php)
привязывая его к идентификатору 'auth'. Так же в данном методе, используя шаблон проектирования «Синглтон», при каждом запросе данного объекта обеспечивается передача одного и того же экземпляра класса без создания нового объекта.
Так же, файл конфигурации config\app.php при загрузке приложения определяет алиасы (псевдонимы) для многих, часто используемых классов, в т.ч. аутентификации. Алиасы берутся из массива aliases:
'aliases' => [ 'App' => Illuminate\Support\Facades\App::class, 'Artisan' => Illuminate\Support\Facades\Artisan::class, 'Auth' => Illuminate\Support\Facades\Auth::class, …
То есть, вызывая
Auth::user()
мы обращаемся к алиасу Auth, содержащему код фасада Auth.
В данном фасаде метод
protected static function getFacadeAccessor() { return 'auth'; }возвращает имя свойства 'auth' глобального объекта app, которое используется приложением для доступа к классу Illuminate\Auth\AuthManager. Фактически, алиас в файле config\app.php мы могли придумать любой, т.к. реальное его значение, по которому будет браться объект AuthManager из глобального объекта app прописано в данном методе.
В итоге, обращаясь к фасаду Auth, мы получаем доступ к классу AuthManager.
Данный класс не содержит метода user(), поэтому выполняется магический метод __call():
public function __call($method, $parameters) { return $this->guard()->{$method}(...$parameters); }
Вызов $this->guard(), согласно настроек указанных в файле config\auth.php:
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ],возвращает объект текущего охранника SessionGuard (файл vendor\laravel\framework\src\Illuminate\Auth\SessionGuard.php)
у которого и вызывается метод user (содержится в переменной $method) возвращающий объект текущего, аутентифицированного пользователя.