кодесурса
«Laravel

Laravel (5.7) Провайдеры услуг

script1adsense2code
script1adsense3code

Вступление

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

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

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

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

php artisan make:provider RiakServiceProvider

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

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

<?php
namespace App\Providers;
use Riak\Connection;
use Illuminate\Support\ServiceProvider;
class RiakServiceProvider extends ServiceProvider
{
    public function register()
    {
        $this->app->singleton(Connection::class, function ($app) 
        {
            return new Connection(config('riak'));
        });
    }
}

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

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

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

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

<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ComposerServiceProvider extends ServiceProvider
{
    public function boot()
    {
        view()->composer('view', function () {
            //
        });
    }
}

Инъекция зависимости метода загрузки

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

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

use Illuminate\Contracts\Routing\ResponseFactory;
public function boot(ResponseFactory $response)
{
    $response->macro('caps', function ($value) {
        //
    });
}

Регистрация провайдеров

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

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

'providers' => [
 // Other Service Providers
 App\Providers\ComposerServiceProvider::class,
],

Отложенные провайдеры

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

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

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

<?php
namespace App\Providers;
use Riak\Connection;
use Illuminate\Support\ServiceProvider;
class RiakServiceProvider extends ServiceProvider
{   
    protected $defer = true;   
    public function register()
    {
        $this->app->singleton(Connection::class, function ($app) {
            return new Connection($app['config']['riak']);
        });
    }
    public function provides()
    {
        return [Connection::class];
    }
}

Предыдущая: Laravel (5.7) Сервисный контейнер
Далее: Laravel (5.7) Фасады

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code