From c5a4d0d0ea51fa45e0d83e2d3c2244eadf8563e7 Mon Sep 17 00:00:00 2001 From: Nikita Sklyarov Date: Mon, 15 Jun 2020 15:07:25 +0300 Subject: [PATCH] Update providers.md --- providers.md | 70 +++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 50 insertions(+), 20 deletions(-) diff --git a/providers.md b/providers.md index 130da329..07539fcb 100644 --- a/providers.md +++ b/providers.md @@ -1,4 +1,4 @@ -git e73c40f0dea4db1205c83584d6c5b544b5ff1683 +git b01a1c4ccfcd940447ea25457eff41e056628e88 --- @@ -7,7 +7,7 @@ git e73c40f0dea4db1205c83584d6c5b544b5ff1683 - [Введение](#introduction) - [Использование сервис-провайдеров](#writing-service-providers) - [Метод Register](#the-register-method) - - [Метод Boot ](#the-boot-method) + - [Метод Boot](#the-boot-method) - [Регистрация провайдеров](#registering-providers) - [Отложенные провайдеры](#deferred-providers) @@ -18,7 +18,7 @@ git e73c40f0dea4db1205c83584d6c5b544b5ff1683 Но что мы понимаем под "первоначальной загрузкой"? В общих чертах, мы имеем ввиду **регистрацию** таких вещей, как биндингов в IoC-контейнер (фасадов и т.д.), слушателей событий, фильтров роутов и даже самих роутов. Сервис-провайдеры - центральное место для конфигурирования вашего приложения. -Если вы откроете файл `config/app.php`, поставляемый с Laravel, то увидите массив `providers`. В нём перечислены все классы сервис-провайдеров, которые загружаются для вашего приложения. Конечно, многие из них являются "отложенными" провайдерами, т.е. они не загружаются при каждом запросе, а только при необходимости. +Если вы откроете файл `config/app.php`, поставляемый с Laravel, то увидите массив `providers`. В нём перечислены все классы сервис-провайдеров, которые загружаются для вашего приложения. Обратите внимание, что многие из них являются "отложенными" провайдерами, т.е. они не загружаются при каждом запросе, а только при необходимости. В этом обзоре вы узнаете, как создавать свои собственные сервис-провайдеры и регистрировать их в своём приложении. @@ -42,13 +42,13 @@ git e73c40f0dea4db1205c83584d6c5b544b5ff1683 namespace App\Providers; - use Riak\Connection; use Illuminate\Support\ServiceProvider; + use Riak\Connection; class RiakServiceProvider extends ServiceProvider { /** - * Регистрация привязки в контейнере. + * Register any application services. * * @return void */ @@ -62,10 +62,47 @@ git e73c40f0dea4db1205c83584d6c5b544b5ff1683 Этот сервис-провайдер только определяет метод `register` и использует его, чтобы определить реализацию `Riak\Connection` в сервис-контейнере. Если вы не понимаете как работает сервис-контейнер, прочитайте [его документацию](/docs/{{version}}/container). +#### Свойства `bindings` и `singletons` + +Если ваш сервис провайдер регистрирует много простых связываний, вы можете использовать свойства `bindings` и `singletons` вместо того, чтобы вручную регистрировать каждое связывание. Когда сервис провайдер загружается фреймворком, он автоматически проверяет эти свойства и создает связывания: + + DigitalOceanServerProvider::class, + ]; + + /** + * All of the container singletons that should be registered. + * + * @var array + */ + public $singletons = [ + DowntimeNotifier::class => PingdomDowntimeNotifier::class, + ServerToolsProvider::class => ServerToolsProvider::class, + ]; + } + ### Метод Boot -А что, если нам нужно зарегистрировать вью-композер в нашем сервис-провайдере? Это нужно делать в методе `boot`. **Этот метод вызывают после того, как были зарегистрированы все другие сервис-провайдеры**. И это значит, что у вас есть доступ ко всем другим сервисам, которые были зарегистрированы фреймворком: +А что, если нам нужно зарегистрировать [вью-композер](/docs/{{version}}/views#view-composers) в нашем сервис-провайдере? Это нужно делать в методе `boot`. **Этот метод вызывают после того, как были зарегистрированы все другие сервис-провайдеры**. И это значит, что у вас есть доступ ко всем другим сервисам, которые были зарегистрированы фреймворком: