Служебный контейнер - это основной компонент платформы Laravel, который готов для использования в том виде, в каком он есть, вы не должны создавать свои собственные сервисные контейнеры, как, например, с поставщиками услуг.
Вы можете представить себе сервисный контейнер как ассоциативный массив, в котором вы можете хранить зависимости (сервисы) и логику их разрешения. Затем вы можете использовать сервисный контейнер, чтобы дать вам то, что вам нужно, основываясь на том, что там есть, используя предоставленную логику.
Было бы проще представить, что сервисный контейнер - это черный ящик, который всегда доступен. Ваше приложение сначала регистрирует (помещает) определенные правила (например, если кто-то хочет объект, который реализует интерфейс PriceCalculator
, тогда передайте ему объект класса MyPriceCalculator
). Это делается методом register()
ваших поставщиков услуг:
$this->app->bind('App\Contracts\PriceCalculator', 'App\Shop\MyPriceCalculator');
Тогда этот черный ящик всегда доступен для вас, поэтому, если вам когда-нибудь понадобится объект PriceCalculator
(например, где-то в контроллере вашей корзины для расчета цены какого-либо заказа), вы можете теперь вместо:
$calculator = new \App\Shop\MyPriceCalculator;
Попросите сервисный контейнер сделать правильный выбор:
$calculator = app()->make('App\Contracts\PriceCalculator');
Обратите внимание, что мы просим сервисный контейнер предоставить нам реализацию интерфейса и, в свою очередь, предоставим нам новый App\Shop\MyPriceCalculator
объект, потому что именно так мы определили (зарегистрировали) App\Contracts\PriceCalculator
сервис ранее.
Использование сервисного контейнера - отличный способ управлять всеми зависимостями вашего приложения, поскольку ваш код будет работать с абстракциями, а способ разрешения этих абстракций всегда будет определяться в одном месте (что означает, что его легче поддерживать, если вы хотите изменить что-то позже).
Если вы новичок в Laravel, я бы порекомендовал пока пропустить сервисные контейнеры, поскольку это немного более сложная тема, и вам необходимо лучше понять шаблон внедрения зависимостей, чтобы полностью понять его и правильно использовать.
Официальную документацию вы можете прочитать здесь .