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

Интеграция 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.

Имя службыВозвращаетВремя жизни по умолчанию
fontRegistryFontRegistryInterfaceобщий
imageRegistryImageRegistryобщий
documentFactoryDocumentFactoryInterfaceобщий
pdfDocumentDocumentновый
pdfPdfновый
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 = 100
nextpdf.signature.enabled = true
nextpdf.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/ — каждый ключ конфигурации.