Перейти к содержимому

Загрузка и обнаружение NextPDF в CodeIgniter

CodeIgniter 4 обнаруживает класс Services, функции-помощники и регистратор пакета через механизм обнаружения пакетов Composer. На этой странице описаны порядок загрузки и конфигурация, которая им управляет.

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).

  1. Автозагрузка Composer. Composer регистрирует карту PSR-4 и записи автозагрузки files. На этом этапе он загружает файл-помощник src/CodeIgniter/Helpers/pdf_helper.php.
  2. Инициализация фреймворка. CodeIgniter читает Config\Modules. Когда обнаружение включено, он формирует список обнаруженных элементов по всем пакетам Composer.
  3. Обнаружение регистратора. Фреймворк собирает классы Registrar. Метод пакета Registrar::Autoload() регистрирует помощник pdf в загрузчике помощников CodeIgniter.
  4. Разрешение службы при первом вызове. Фабрики служб работают лениво. Первый вызов 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(), а функциональные тесты пакета полагаются на такой сброс между сценариями.

Действующая конфигурация разрешается в следующем порядке:

  1. Значения по умолчанию пакета в NextPDF\CodeIgniter\Config\NextPdf.
  2. Класс приложения Config\NextPdf, который расширяет класс пакета, если такой класс присутствует. CodeIgniter загружает его вместо значения по умолчанию пакета.
  3. Переопределения из окружения, которые применяет 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/ — режимы сбоев обнаружения.