Интеграция NextPDF с CodeIgniter
Краткий обзор
Заголовок раздела «Краткий обзор»Установите пакет, и CodeIgniter 4 подключит его автоматически. Эта страница помогает проверить, что интеграция подключена правильно: обнаружение, модель привязок, публикация конфигурации и дымовой тест в одном методе, подтверждающем работоспособность интеграции.
Установка
Заголовок раздела «Установка»composer require nextpdf/codeigniterВам не нужно править поставщик служб или изменять файл начальной загрузки. Проверенные ограничения версий см. на странице /integrations/codeigniter/install/.
Загрузка и автоматическое обнаружение
Заголовок раздела «Загрузка и автоматическое обнаружение»CodeIgniter 4 находит пакет через механизм обнаружения пакетов Composer, когда Config\Modules::$discoverInComposer равно true — значению фреймворка по умолчанию. Префикс PHP Standard Recommendation 4 (PSR-4) NextPDF\CodeIgniter\ сопоставляется с src/CodeIgniter/, поэтому фреймворк может разрешить NextPDF\CodeIgniter\Config\Services в соответствующий файл (PSR-4 §x1.x3). Полная последовательность и управляющие ей свойства Config\Modules описаны на странице /integrations/codeigniter/boot-and-discovery/.
Привязки контейнера
Заголовок раздела «Привязки контейнера»CodeIgniter 4 не поставляется с контейнером PSR-11. PSR-11 §1.3 не рекомендует шаблон service-locator (модальность SHOULD NOT). Пакет следует соглашению фреймворка о локаторе и использует его минимально. Каждая привязка — именованная статическая фабрика с параметром bool $getShared.
| Имя службы | Возвращает | Время жизни по умолчанию |
|---|---|---|
fontRegistry | FontRegistryInterface | общий |
imageRegistry | ImageRegistry | общий |
documentFactory | DocumentFactoryInterface | общий |
pdfDocument | Document | новый |
pdf | Pdf | новый |
tsaClient | ?TsaClient | общий |
pdfSigner | ?SignerInterface | новый |
Используйте любую из точек входа — они равнозначны:
<?php
declare(strict_types=1);
use NextPDF\CodeIgniter\Config\Services;
$a = Services::pdf(false); // direct$b = \service('pdf'); // helper → Services::pdf()Глобальные функции-помощники pdf() и pdf_document() служат обёртками над Services::pdf(false) и Services::pdfDocument(false).
Публикация конфигурации
Заголовок раздела «Публикация конфигурации»Конфигурация пакета находится в NextPDF\CodeIgniter\Config\NextPdf — нефинальном классе BaseConfig. Вы можете переопределить её одним из двух поддерживаемых способов:
1. Расширьте класс (типизированно, под контролем версий). Создайте app/Config/NextPdf.php:
<?php
declare(strict_types=1);
namespace Config;
use NextPDF\CodeIgniter\Config\NextPdf as BaseNextPdf;
final class NextPdf extends BaseNextPdf{ public int $imageCacheMb = 100;}CodeIgniter загрузит класс вашего приложения вместо класса пакета по умолчанию.
2. Переопределите через .env (для каждого окружения). В качестве префикса используйте короткое имя класса в нижнем регистре: nextpdf:
nextpdf.imageCacheMb = 100nextpdf.signature.enabled = truenextpdf.signature.certificate = /etc/nextpdf/cert.pemКаждый ключ и правило переопределения массивов описаны на странице /integrations/codeigniter/configuration/.
Дымовой тест поставщика служб / бандла
Заголовок раздела «Дымовой тест поставщика служб / бандла»В CodeIgniter нет поставщика служб или класса бандла, которые нужно тестировать. Используйте равнозначный дымовой тест, чтобы проверить две вещи: обнаружение разрешило службы, а время жизни соответствует указанному. Приведённое ниже действие контроллера можно запустить; оно повторяет собственные функциональные проверки пакета.
<?php
declare(strict_types=1);
namespace App\Controllers;
use CodeIgniter\HTTP\ResponseInterface;use NextPDF\CodeIgniter\Config\Services;use NextPDF\CodeIgniter\Libraries\Pdf;use NextPDF\Core\Document;
final class NextPdfSmokeController extends BaseController{ public function check(): ResponseInterface { // Discovery resolved the services. $document = Services::pdfDocument(false); $library = Services::pdf(false);
// Documents are fresh per call (no cross-request leakage). $freshIsolated = Services::pdfDocument(false) !== $document;
// Registries are shared singletons. $registrySingleton = Services::fontRegistry() === Services::fontRegistry();
// Optional services degrade to null without Premium / TSA config. $signerOptional = Services::pdfSigner(false) === null;
$ok = $document instanceof Document && $library instanceof Pdf && $freshIsolated && $registrySingleton && $signerOptional;
return $this->response ->setStatusCode($ok ? 200 : 500) ->setJSON([ 'discovery' => $document instanceof Document, 'document_fresh_per_call' => $freshIsolated, 'registry_shared' => $registrySingleton, 'signer_optional_null' => $signerOptional, ]); }}Сопоставьте маршрут с этим действием, затем отправьте к нему запрос. Ответ 200 со всеми флагами, установленными в true, подтверждает работоспособность интеграции. Каждая проверка здесь соответствует поведению, проверенному в наборе функциональных тестов пакета.
Граничные случаи и подводные камни
Заголовок раздела «Граничные случаи и подводные камни»- Если основное приложение отключает обнаружение через Composer, добавьте
nextpdf/codeigniterвConfig\Modules::$composerPackages['only']. Services::pdfDocument(true)возвращает общий документ. Он существует только для сброса состояния в тестах. Никогда не запрашивайте общий документ в коде запроса или задания.Services::pdfSigner()иServices::tsaClient()возвращаютnull, пока не настроена подпись или конечная точка службы меток времени (TSA). Это предусмотренная мягкая деградация, а не сбой.
Соответствие
Заголовок раздела «Соответствие»- Сопоставление класса с путём для обнаружения модулей (PSR-4 Autoloader §x1.x3).
- Рекомендации по service-locator для модели привязок (PSR-11 Container §1.3).
Коммерческий контекст
Заголовок раздела «Коммерческий контекст»Ядро NextPDF распространяется под Apache-2.0. После установки Pro или Enterprise их службы появляются в том же интерфейсе Services. Пакет CodeIgniter предоставляет соответствующие методы служб. Каждый метод возвращает null, пока не установлен соответствующий пакет Premium. См. </get-license/?intent=codeigniter>.
См. также
Заголовок раздела «См. также»- /integrations/codeigniter/boot-and-discovery/ — внутреннее устройство обнаружения.
- /integrations/codeigniter/install/ — ограничения версий и проверка.
- /integrations/codeigniter/quickstart/ — первый PDF.
- /integrations/codeigniter/production-usage/ — контроллеры, подключённые через внедрение зависимостей, и задания очереди.
- /integrations/codeigniter/configuration/ — каждый ключ конфигурации.