Робочий процес подубдови контейнера

Дата оновлення перекладу 2023-08-21

Робочий процес подубдови контейнера

Розташування файлів та класів, повʼязаних з компонентом Впровадження залежності, залежить від додатку, бібліотеки або фреймворку, в якому ви хочете використати контейнер. Якщо ви розглянете як побудовано та сконфігуровано контейнер у комплексному фреймворку Symfony, то ви побачите, як це все взаємоповʼязано, незалежно від того, використовуєте ви комплексний фреймворк, чи плануєте використовувати сервіс-контейнер в іншому додатку.

Комплексний фреймворк використовує компонент HttpKernel для управління завантаженням конфігурації сервіс-контейнера з додатку та пакетів, а також обробляє компіляцію та кешування. Навіть якщо ви не використовуєте HttpKernel, то це повинно дати вам розуміння одного зі способів організації конфігурації у модульному додатку.

Робота з кешованим контейнером

До того, як почати побудову, ядро перевіряє, чи існує кешована версія контейнера. Ядро має налаштування налагодження, і якщо воно "false", то використовується кешована версія, якщо вона існує. Якщо налагодження "true", то ядро перевіряє актуальність конфігурації, і якщо все добре, то використовується кешована версія контейнера. Якщо ж ні, то контейнер будується з конфігурації на рівні додатку та конфігурації розширень пакету.

Прочитайте Скидання конфігурації для продуктивності , щоб дізнатися більше.

Конфігурація на рівні додатку

Конфігурація на рівні додатку завантажується з каталогу config. Завантажується багато файлів, які потім обʼєднуються при обробці розширень. Це дозволяє використовувати різні конфігурації для різних середовищ, наприклад, dev, prod.

Ці файли містять параметри та сервіси, які завантажуються напряму у контейнер на підстави Налаштування контейнера з файлами конфігурації . Вони також містять конфігурацію, яка обробляється розширеннями на підставі Управління конфігурацією з розширеннями . Це вважається пакетною конфігурацією, так як кожний пакет містить клас Extension.

Конфігурація на рівні пакетів з розширеннями

За угодою, кожний пакет містить клас Extension, який знаходиться у каталозі пакету DependencyInjection. Вони реєструються в ContainerBuilder при завантаженні ядра. Коли компілюється ContainerBuilder, конфігурація на рівні додатку, повʼязана з розширенням пакету, передається розширенню, яке зазвичай завантажує власний(і) файл(и) конфігурації, зазвичай з каталогу пакету Resources/config. Конфігурація на рівнідодатку зазвичай обробляється обʼєктом Конфігурації і також зберігається у каталозі пакету DependencyInjection.

Передачі Компілятора для дозволу взаємодії між пакетами

Передачі Компілятора використовуються для дозволу взаємодії між різними пакетами, так як вони не можуть вплинути на конфігурацію одне одного в існуючих класах. Основними способами застосування є обробка тегованих сервісів, дозвіл пакетам реєструвати сервіси, які подхоплять інші пакети, на кшталт логерів Monolog, розширень Twig, збиральників даних для Веб-Профілювальника. Передачі Компілятора зазвичай розташовані у каталозі пакету DependencyInjection/Compiler.

Компіляція і кешування

Після того, як процес компіляції завантажив сервіси з конфігурації, розширень та передач компілятора, він скидається для того, щоб кеш можна було використати у
наступний раз. Скинута версія потім використовується під час наступних запитів, так яке це ефективніше.