Фасад в Laravel - это класс, который предоставляет доступ к объекту в контейнере. Рассмотрим как происходит вызов методов фасада на примере фасада аутентификации пользователей (Auth). Про создание аутентификации для вашего приложения читайте тут.

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

Например, в действии контроллера, нам потребовалось получить данные текущего, аутентифицированного (залогиненного) пользователя:
$user = Auth::user();
для анализа, выведем объект User со всеми данными на экран используя функцию Laravel dump():
dump($user);
объект User Laravel
тут мы можем посмотреть данные, в т.ч. из базы данных, по текущему пользователю.

Но как происходит вызов методов фасада 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) возвращающий объект текущего, аутентифицированного пользователя.