Laravel (5.7) Поставщики услуг

Мы загружаем основные сервисы нашего приложения Laravel через поставщиков сервисов. Контейнеры служб позволяют нам определять привязки и внедрять зависимости, поставщик услуг — это место, где происходит действие. Если вы откроете файл config/app.php, включенный в Laravel, вы увидите массив поставщиков. Это все классы поставщиков услуг, которые будут загружены для вашего приложения. Конечно, многие из них являются «отложенными» поставщиками, то есть они не будут загружаться при каждом запросе, а только тогда, когда предоставляемые ими услуги действительно необходимы.

Написание поставщиков услуг

Все поставщики услуг расширяют класс Illuminate/Support/ServiceProvider. Большинство поставщиков услуг содержат регистр и метод загрузки. Внутри метода регистрации. Вам следует только слепить вещи в сервисный контейнер. Вы никогда не должны пытаться зарегистрировать какие-либо прослушиватели событий, маршруты или любую другую часть функциональности в методе register.

Artisan CLI может сгенерировать нового поставщика с помощью make :: Provider .

  php artisan make: provider RiakServiceProvider  

Метод регистрации

В методе register вы должны только заглядывать в сервисный контейнер. Вы никогда не должны пытаться регистрировать какие-либо прослушиватели событий, маршруты или любую другую функциональность в методе register. В противном случае вы можете случайно воспользоваться услугой, предоставляемой поставщиком услуг, которая еще не загружена. Давайте посмотрим на этот пример кода

   Phpnamespace App  Providers; используйте Riak  Connection; используйте Illuminate  Support  ServiceProvider; класс RiakServiceProvider расширяет ServiceProvider {public function register () {  $ this-> app-> singleton (Connection :: class, function ($ app) {return new Connection (config ('riak'));}));  }}  

Этот поставщик услуг определяет только метод регистрации и использует этот метод для определения реализации Riak//Connection в контейнере службы.

Метод загрузки

Итак, что, если нам нужно зарегистрировать композитор представления в нашем поставщике услуг? Это должно быть сделано в рамках метода загрузки. Этот метод вызывается после регистрации всех других поставщиков услуг.

Давайте рассмотрим простой пример.

   phpnamespace App  Providers; используйте Illuminate  Support  ServiceProvider; класс ComposerServiceProvider расширяет ServiceProvider {публичную функцию boot () {view () -> composer ('view', function () {//});  }}  

Внедрение зависимостей метода загрузки

Вы можете указать зависимости для метода загрузки вашего поставщика услуг. Сервисный контейнер автоматически внедрит все необходимые зависимости.

Давайте посмотрим на простой пример..

  используйте Illuminate  Contracts  Routing  ResponseFactory; загрузка общедоступной функции (ResponseFactory $ response) {$ response-> macro ('caps', function ($ value  ) {//});}  

Регистрация поставщиков

Все поставщики услуг зарегистрированы в config/ файл конфигурации app.php. Этот файл содержит массив поставщиков, в котором вы можете перечислить имена классов ваших поставщиков услуг. По умолчанию в этом массиве перечислены основные поставщики услуг Laravel. Эти поставщики загружают основные компоненты Laravel, такие как почтовая программа, очередь, кеш и другие.

Чтобы зарегистрировать своего поставщика, просто добавьте его в массив.

   'providers' => [//Другие поставщики услуг App  Providers  ComposerServiceProvider :: class,],  

Отложенные поставщики

Если ваш провайдер только регистрирует привязки в сервисном контейнере, вы можете отложить его регистрацию до тех пор, пока одна из зарегистрированных привязок действительно не понадобится. Отсрочка загрузки такого поставщика улучшит производительность вашего приложения, поскольку оно не загружается из файловой системы при каждом запросе. Laravel компилирует и сохраняет список всех служб, предоставляемых отложенными поставщиками услуг, вместе с именем своего класс поставщика услуг. Затем, только когда вы пытаетесь разрешить одну из этих служб, Laravel загружает поставщика услуг.

Чтобы отложить загрузку поставщика, установите для свойства defer значение true и определите метод provide. Метод Providers должен возвращать привязки контейнера службы, зарегистрированные поставщиком.

Давайте рассмотрим простой пример.

   Phpnamespace App  Providers  ; использовать Riak  Connection; использовать Illuminate  Support  ServiceProvider; класс RiakServiceProvider расширяет ServiceProvider {protected $ defer = true;  общедоступная функция register () {$ this-> app-> singleton (Connection :: class, function ($ app) {return new Connection ($ app ['config'] ['riak']);});  } публичная функция предоставляет () {return [Connection :: class];  }}  

Оцените статью
nanomode.ru
Добавить комментарий