Service providers

Service providers (сервіс-провайдери, дослівно - «постачальники послуг») займають центральне місце в архітектурі Laravel. Вони призначені для первинного завантаження (bootstraping) додатки. Ваша програма, а також сервіси самого фреймворка завантажуються через сервіс-провайдери.

Що конкретно означає термін «первісна завантаження» або «bootsraping»? Головним чином це реєстрація деяких речей - таких як Біндінг в IoC-контейнер (фасадів і т.д.), слухачів подій (event listeners), фільтрів Рауса (route filters) і самих Рауса (routes). Сервіс-провайдери - центральне місце для конфігурації вашого застосування.

Якщо ви відкриєте файл config / app.php. ви побачите масив providers. У ньому перераховані всі класи сервіс-провайдерів, які завантажуються при старті вашої програми (звичайно, крім тих, які є «відкладеними» (deferred), тобто завантажуються на вимогу іншого сервіс-провайдера).

Можна і потрібно створювати свої власні сервіс-провайдери для завантаження і налаштування різних частин свого застосування.

Використання провайдерів

Сервіс-провайдери повинні розширювати (extends) клас Illuminate \ Support \ ServiceProvider. Це абстрактний клас, який вимагає, щоб в успадковане класі був метод register (). У методі register () ви можете тільки реєструвати свої класи (bindings) в сервіс-контейнері. Слухачів подій (event listeners), Рауса і фільтри Рауса там реєструвати не можна.

За допомогою Artisan можна легко створити нового провайдера, використовуючи команду make: provider:

Метод register ()

Ось так може виглядати простий сервіс-провайдер:

У register () ми реєструємо (bind) як singleton (тобто класу не буде переініціалізіроваться після виклику з контейнера) в сервіс-контейнері клас роботи з базою даних Riak. Якщо для вас цей код виглядає абракадаброю, не хвилюйтеся, роботу сервіс-контейнера ми розглянемо пізніше.

Неймспейс App \ Providers. в якому знаходиться цей клас сервіс-провайдера - дефолтний місце для зберігання сервіс-провайдерів вашого Laravel-додатки, але ви можете розташовувати свої сервіс-провайдери де завгодно всередині вашої PSR-4 папки (якщо ви не міняли composer.json. то це папка app ).

Метод boot ()

Коли зголосилися методи register () всіх сервіс-провайдерів додатки, викликається метод boot () сервіс-провайдерів. Там вже можна використовувати весь існуючий функціонал класів фреймворка і вашої програми - реєструвати слухачів подій, підключати Рауса і т.п.

Зверніть увагу, що сервіс-контейнер, викликаючи метод boot (). сам запровадить ті залежності, які ви задасте, зокрема, Dispatcher.

Реєстрація провайдерів

Все сервіс-провайдери реєструються у файлі config / app.php шляхом додавання в масив providers. Все сервіс-провайдери фреймворка знаходяться там.

Щоб зареєструвати свій сервіс-провайдер, додайте назву класу в цей масив:

відкладені провайдери

Якщо ваш провайдер тільки реєструє (bind) класи в сервіс-контейнері. то ви можете відкласти виклик його методу register () до моменту, коли ці класи будуть затребувані з сервіс-контейнера. Це дозволить не смикати файлову систему кожен запит в спробах завантажити файл з потрібним класом з диска.

Для того, щоб зробити сервіс-провайдер відкладеним, встановіть властивість defer в true і визначити метод provides (). щоб фреймворк знав, які класи бінді (реєструються в сервіс-контейнері, «зв'язуються») в вашому провайдеру.

Laravel в процесі запуску збирає дані про відкладення сервіс-провайдерів і класах, які ними реєструються, і коли в процесі роботи з додатком знадобиться клас Riak \ Contracts \ Connection. він викличе метод register () сервіс провайдера RiakServiceProvider.

Приєднуйтесь