Робочий процес подубдови контейнера
Дата оновлення перекладу 2023-08-21
Робочий процес подубдови контейнера
Розташування файлів та класів, повʼязаних з компонентом Впровадження залежності, залежить від додатку, бібліотеки або фреймворку, в якому ви хочете використати контейнер. Якщо ви розглянете як побудовано та сконфігуровано контейнер у комплексному фреймворку Symfony, то ви побачите, як це все взаємоповʼязано, незалежно від того, використовуєте ви комплексний фреймворк, чи плануєте використовувати сервіс-контейнер в іншому додатку.
Комплексний фреймворк використовує компонент HttpKernel для управління завантаженням конфігурації сервіс-контейнера з додатку та пакетів, а також обробляє компіляцію та кешування. Навіть якщо ви не використовуєте HttpKernel, то це повинно дати вам розуміння одного зі способів організації конфігурації у модульному додатку.
Робота з кешованим контейнером
До того, як почати побудову, ядро перевіряє, чи існує кешована версія контейнера. Ядро має налаштування налагодження, і якщо воно "false", то використовується кешована версія, якщо вона існує. Якщо налагодження "true", то ядро перевіряє актуальність конфігурації, і якщо все добре, то використовується кешована версія контейнера. Якщо ж ні, то контейнер будується з конфігурації на рівні додатку та конфігурації розширень пакету.
Прочитайте Скидання конфігурації для продуктивності , щоб дізнатися більше.
Конфігурація на рівні додатку
Конфігурація на рівні додатку завантажується з каталогу config
. Завантажується
багато файлів, які потім обʼєднуються при обробці розширень. Це дозволяє використовувати
різні конфігурації для різних середовищ, наприклад, dev, prod.
Ці файли містять параметри та сервіси, які завантажуються напряму у контейнер на підстави Налаштування контейнера з файлами конфігурації . Вони також містять конфігурацію, яка обробляється розширеннями на підставі Управління конфігурацією з розширеннями . Це вважається пакетною конфігурацією, так як кожний пакет містить клас Extension.
Конфігурація на рівні пакетів з розширеннями
За угодою, кожний пакет містить клас Extension, який знаходиться у каталозі пакету
DependencyInjection
. Вони реєструються в ContainerBuilder
при завантаженні ядра.
Коли компілюється ContainerBuilder
,
конфігурація на рівні додатку, повʼязана з розширенням пакету, передається розширенню,
яке зазвичай завантажує власний(і) файл(и) конфігурації, зазвичай з каталогу пакету
Resources/config
. Конфігурація на рівнідодатку зазвичай обробляється
обʼєктом Конфігурації і також зберігається у каталозі
пакету DependencyInjection
.
Передачі Компілятора для дозволу взаємодії між пакетами
Передачі Компілятора
використовуються для дозволу взаємодії між різними пакетами, так як вони не
можуть вплинути на конфігурацію одне одного в існуючих класах. Основними способами
застосування є обробка тегованих сервісів, дозвіл пакетам реєструвати сервіси,
які подхоплять інші пакети, на кшталт логерів Monolog, розширень Twig, збиральників
даних для Веб-Профілювальника. Передачі Компілятора зазвичай розташовані у каталозі
пакету DependencyInjection/Compiler
.
Компіляція і кешування
Після того, як процес компіляції завантажив сервіси з конфігурації, розширень та
передач компілятора, він скидається для того, щоб кеш можна було використати у
наступний раз. Скинута версія потім використовується під час наступних запитів,
так яке це ефективніше.