Загрузка и обнаружение NextPDF в CodeIgniter
CodeIgniter 4 обнаруживает класс Services, функции-помощники и регистратор пакета через механизм обнаружения пакетов Composer. На этой странице описаны порядок загрузки и конфигурация, которая им управляет.
Как работает обнаружение служб в CodeIgniter
Заголовок раздела «Как работает обнаружение служб в CodeIgniter»CodeIgniter 4 разрешает службу, просматривая каждый обнаруженный класс Config\Services и находя статический метод с именем запрошенной службы. Когда приложение вызывает service('pdf'), фреймворк находит первый обнаруженный класс Services, который объявляет метод pdf, а затем вызывает его.
Обнаружением управляет Config\Modules:
$enabled— основной переключатель автоматического обнаружения. По умолчаниюtrue.$discoverInComposer— распространяет обнаружение на пакеты Composer. По умолчаниюtrue. Этот флаг позволяет фреймворку найтиnextpdf/codeigniter.$composerPackages— необязательный фильтрonly/excludeдля набора пакетов Composer.$aliases— типы элементов, которые участвуют в обнаружении. По умолчанию во фреймворке включеныservicesиregistrars, и этот пакет использует оба.
Класс служб пакета — NextPDF\CodeIgniter\Config\Services. Composer сопоставляет префикс PHP Standards Recommendation 4 (PSR-4) NextPDF\CodeIgniter\ с каталогом src/CodeIgniter/. Полное имя класса должно иметь пространство имён верхнего уровня (PSR-4 §x1.x2.p5, модальность MUST). Префикс пространства имён сопоставляется с базовым каталогом, поэтому класс разрешается в свой файл (PSR-4 §x1.x3).
Последовательность загрузки
Заголовок раздела «Последовательность загрузки»- Автозагрузка Composer. Composer регистрирует карту PSR-4 и записи автозагрузки
files. На этом этапе он загружает файл-помощникsrc/CodeIgniter/Helpers/pdf_helper.php. - Инициализация фреймворка. CodeIgniter читает
Config\Modules. Когда обнаружение включено, он формирует список обнаруженных элементов по всем пакетам Composer. - Обнаружение регистратора. Фреймворк собирает классы
Registrar. Метод пакетаRegistrar::Autoload()регистрирует помощникpdfв загрузчике помощников CodeIgniter. - Разрешение службы при первом вызове. Фабрики служб работают лениво. Первый вызов
service('pdf')илиServices::pdf()запускает фабрику. Общие службы кэшируются в локаторе на время работы процесса.
Привязки контейнера
Заголовок раздела «Привязки контейнера»CodeIgniter 4 не предоставляет контейнер PSR-11. Вместо этого роль привязок выполняют статические фабричные методы класса Services. Каждый метод принимает параметр bool $getShared:
| Служба | Общий по умолчанию | Примечания |
|---|---|---|
fontRegistry | да | Прогревается, затем блокируется. |
imageRegistry | да | Ограниченный по размеру кэш с вытеснением давно не используемых элементов (LRU). |
documentFactory | да | Без сохранения состояния. |
pdfDocument | нет | Новый экземпляр при каждом вызове. |
pdf | нет | Новый экземпляр при каждом вызове. |
tsaClient | да | null, если не настроен URL службы меток времени (TSA). |
pdfSigner | нет | null, если подписание отключено. |
Общие экземпляры хранятся в кэше экземпляров BaseService в CodeIgniter на время работы процесса. Тестовая оснастка фреймворка очищает этот кэш с помощью BaseService::reset(), а функциональные тесты пакета полагаются на такой сброс между сценариями.
Порядок разрешения конфигурации
Заголовок раздела «Порядок разрешения конфигурации»Действующая конфигурация разрешается в следующем порядке:
- Значения по умолчанию пакета в
NextPDF\CodeIgniter\Config\NextPdf. - Класс приложения
Config\NextPdf, который расширяет класс пакета, если такой класс присутствует. CodeIgniter загружает его вместо значения по умолчанию пакета. - Переопределения из окружения, которые применяет
BaseConfig, с ключом по короткому имени класса в нижнем регистреnextpdf(вложенные ключи через точку или полная форма имени класса).
Файл расширения конфигурации приложения объявляет один класс и не имеет побочных эффектов. Это соответствует требованию PSR-1: файл либо объявляет символы, либо выполняет логику с побочными эффектами, но не делает и то и другое одновременно (PSR-1 §x1.x1.p3). Файл-помощник — намеренный аналог с побочными эффектами. Он объявляет глобальные функции pdf() и pdf_document(), каждая из которых защищена проверкой function_exists, поэтому повторная загрузка безопасна.
Диагностика
Заголовок раздела «Диагностика»composer dump-autoload— перестраивает карту PSR-4 и список автозагрузкиfilesпосле обновления.- Для быстрой проверки обнаружения используйте контроллер, который вызывает
Services::pdfDocument(false)и проверяет возвратDocument. - Просмотрите
vendor/composer/autoload_files.php, чтобы убедиться, что файл-помощник зарегистрирован. - Соответствие сбоев их причинам см. в /integrations/codeigniter/troubleshooting/.
Соответствие
Заголовок раздела «Соответствие»- Полное имя класса требует наличия пространства имён верхнего уровня (PSR-4 Autoloader §x1.x2.p5).
- Сопоставление префикса пространства имён с базовым каталогом для пути к классу (PSR-4 Autoloader §x1.x3).
- Файл объявляет символы или вызывает побочные эффекты — устройство файла-помощника (PSR-1 Basic Coding Standard §x1.x1.p3).
См. также
Заголовок раздела «См. также»- /integrations/codeigniter/integration/ — справочник по привязкам и дымовой тест.
- /integrations/codeigniter/install/ — установка и проверка обнаружения.
- /integrations/codeigniter/overview/ — полный набор интерфейсов прикладного программирования (API).
- /integrations/codeigniter/troubleshooting/ — режимы сбоев обнаружения.