Все классы-сервисы, как стандартные (например для работы с валидацией, аутентификацией, базой данных и др.) так и пользовательские, с помощью сервис-провайдеров (в основном) регистрируются в сервис-контейнере (глобальном объекте App).
Список сервис-провайдеров можно посмотреть в файле config\app.php в массиве providers.

Глобальный объект создается в файле bootstrap\app.php
$app = new Illuminate\Foundation\Application(
    realpath(__DIR__.'/../')
);
на основе класса Application из файла vendor\laravel\framework\src\Illuminate\Foundation\Application.php который так же наследует класс сервис-контейнера Container (файл vendor\laravel\framework\src\Illuminate\Container\Container.php)


Получить доступ к глобальному объекту (например из методов контроллера) можно с помощью функции-помошника:
app()
которая вызывает статический метод getInstance() класса Container, возвращающий экземпляр контейнера, содержащийся в свойстве
protected static $instance.
Поэтому получить доступ можно и таким вызовом:
use Illuminate\Container\Container;
…
Container::getInstance()

то же самое используя фасад App:
use App;
…
App::getInstance()

Касательно фасада App - регистрация глобального объекта в сервис-контейнере (а класс глобального объекта Application наследует от класса сервис контейнера Container) по алиасу 'app' осуществляется с помощью метода registerBaseBindings() класса Application (файл vendor\laravel\framework\src\Illuminate\Foundation\Application.php)


Получив глобальный объект класса Application, можно вывести на экран его свойства (в т.ч. защищенные):
dump(app());

Посмотреть список зарегистрированных сервисов можно раскрыв свойство bindings:

dump_App

Если другие свойства не интересуют, то можно сразу вывести только свойство bindings:
dump(app()->getBindings());

Получив доступ к глобальному объекту, можно получить доступ к любому другому объекту, зарегистрированному в сервис-контейнере. А это все самые используемые в работе объекты.

Прежде всего доступ к определенному сервису (объекту) можно получить с помощью механизма внедрения зависимостей (Dependency injection container), который реализует сервис-контейнер в Laravel. Например нужно получить объект текущего запроса Request в методе контроллера:
public function form(Request $request){}
далее просто используем полученный объект в нужных целях::
if($request->isMethod('post')){}
В Laravel, внедрить нужную зависимость можно в любой метод любого класса, который регистрируется в сервис-контейнере.



Так же, для того, чтобы «вытащить» нужный объект из сервис-контейнера, используется метод make().

Например получим объект AuthManager, который работает с аутентификацией пользователей:
app()->make('auth')
в качестве аргумента, методу make() нужно передать строковый ключ, по которому нужный класс-сервис зарегистрирован в сервис контейнере. В данном случае это 'auth'.
Обычно, в качестве таких ключей указываются алиасы. Список доступных алиасов можно посмотреть в файле config\app.php в массиве «aliases» где мы увидим и данный алиас:
'Auth' => Illuminate\Support\Facades\Auth::class,

Так же, есть и более простой синтаксис для получения нужного объекта из сервис-контейнера. Получим объект AuthManager:
app('auth')

Вот код функции-помошника app():
function app($abstract = null, array $parameters = [])
{
    if (is_null($abstract)) {
        return Container::getInstance();
    }

    return empty($parameters)
    ? Container::getInstance()->make($abstract)
    : Container::getInstance()->makeWith($abstract, $parameters);
}
тут видим, что при передаче в качестве первого аргумента строкового ключа (алиаса) нужного объекта, как раз вызывается тот самый метод make() сданным аргументом.

Подробнее прочитать про использование сервис-контейнера, сервис провайдеры и фасады можно в статье Архитектура Laravel - практическое применение.