NextPDF-Integration für CodeIgniter
Auf einen Blick
Abschnitt betitelt „Auf einen Blick“Installieren Sie das Paket; CodeIgniter 4 verdrahtet es für Sie. Diese Seite ist die Referenz für diese Verdrahtung. Sie behandelt Discovery, das Bindings-Modell, das Veröffentlichen der Konfiguration und einen Smoke-Test mit einer einzigen Methode, der nachweist, dass die Integration funktioniert.
Installation
Abschnitt betitelt „Installation“composer require nextpdf/codeigniterSie müssen weder einen Service-Provider bearbeiten noch eine Bootstrap-Datei ändern. Unter /integrations/codeigniter/install/ finden Sie die geprüften Versionsbeschränkungen.
Boot / Auto-Discovery
Abschnitt betitelt „Boot / Auto-Discovery“CodeIgniter 4 findet das Paket über die Composer-Paket-Discovery. Das geschieht, wenn Config\Modules::$discoverInComposer den Wert true hat, was der Voreinstellung des Frameworks entspricht. Das PSR-4-Präfix NextPDF\CodeIgniter\ ist auf src/CodeIgniter/ abgebildet. Anhand dieser Abbildung löst das Framework NextPDF\CodeIgniter\Config\Services zu seiner Datei auf (PSR-4 §x1.x3). /integrations/codeigniter/boot-and-discovery/ dokumentiert die vollständige Sequenz und die maßgeblichen Config\Modules-Eigenschaften.
Container-Bindings
Abschnitt betitelt „Container-Bindings“CodeIgniter 4 bringt keinen PSR-11-Container mit. PSR-11 §1.3 rät vom Service-Locator-Muster ab (modal SHOULD NOT). Das Paket folgt der Locator-Konvention des Frameworks, hält sie aber bewusst minimal. Jedes Binding ist eine benannte statische Factory mit einem Parameter bool $getShared.
| Service-Name | Rückgabe | Standard-Lebensdauer |
|---|---|---|
fontRegistry | FontRegistryInterface | geteilt |
imageRegistry | ImageRegistry | geteilt |
documentFactory | DocumentFactoryInterface | geteilt |
pdfDocument | Document | neu |
pdf | Pdf | neu |
tsaClient | ?TsaClient | geteilt |
pdfSigner | ?SignerInterface | neu |
Lösen Sie über einen der beiden Einstiegspunkte auf — sie sind gleichwertig:
<?php
declare(strict_types=1);
use NextPDF\CodeIgniter\Config\Services;
$a = Services::pdf(false); // direct$b = \service('pdf'); // helper → Services::pdf()Die globalen Helper pdf() und pdf_document() sind dünne Wrapper um Services::pdf(false) und Services::pdfDocument(false).
Konfiguration veröffentlichen
Abschnitt betitelt „Konfiguration veröffentlichen“Die Paketkonfiguration liegt in NextPDF\CodeIgniter\Config\NextPdf, einer nicht finalen BaseConfig. Sie haben zwei unterstützte Wege, sie zu überschreiben:
1. Erweitern Sie die Klasse (typisiert, versionsverwaltet). Legen Sie app/Config/NextPdf.php an:
<?php
declare(strict_types=1);
namespace Config;
use NextPDF\CodeIgniter\Config\NextPdf as BaseNextPdf;
final class NextPdf extends BaseNextPdf{ public int $imageCacheMb = 100;}CodeIgniter lädt Ihre Anwendungsklasse anstelle der Paketvorgabe.
2. Überschreiben Sie per .env (pro Umgebung). Das Präfix ist der kurze Klassenname in Kleinschreibung, nextpdf:
nextpdf.imageCacheMb = 100nextpdf.signature.enabled = truenextpdf.signature.certificate = /etc/nextpdf/cert.pem/integrations/codeigniter/configuration/ dokumentiert alle Schlüssel und die Regel zum Überschreiben von Arrays.
Smoke-Test für Service-Provider / Bundle
Abschnitt betitelt „Smoke-Test für Service-Provider / Bundle“CodeIgniter hat keinen Service-Provider und keine Bundle-Klasse, die hier zu testen wäre. Der gleichwertige Smoke-Test prüft daher zwei Dinge: ob Discovery die Services aufgelöst hat und ob sich die Lebensdauern wie spezifiziert verhalten. Der folgende Test ist eine ausführbare Controller-Aktion, die die funktionalen Assertions des Pakets widerspiegelt.
<?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, ]); }}Verbinden Sie eine Route mit dieser Aktion und rufen Sie sie auf. Eine 200-Antwort, in der alle Flags auf true stehen, weist die Integration nach. Jede Assertion hier entspricht einem geprüften Verhalten in der funktionalen Test-Suite des Pakets.
Sonderfälle & Stolpersteine
Abschnitt betitelt „Sonderfälle & Stolpersteine“- Wenn die Host-Anwendung die Composer-Discovery abschaltet, fügen Sie
nextpdf/codeigniterzuConfig\Modules::$composerPackages['only']hinzu. Services::pdfDocument(true)gibt ein geteiltes Dokument zurück. Es existiert nur zum Zurücksetzen in Tests. Fordern Sie das geteilte Dokument niemals in Request- oder Job-Code an.Services::pdfSigner()undServices::tsaClient()gebennullzurück, bis das Signieren oder eine TSA-URL konfiguriert ist. Das ist beabsichtigte graceful Degradation, kein Fehler.
Konformität
Abschnitt betitelt „Konformität“- Klassenpfadabbildung für die Modul-Discovery (PSR-4 Autoloader §x1.x3).
- Service-Locator-Leitlinie für das Bindings-Modell (PSR-11 Container §1.3).
Kommerzieller Kontext
Abschnitt betitelt „Kommerzieller Kontext“Der NextPDF-Kern steht unter der Apache-2.0-Lizenz. Pro- und Enterprise-Services erscheinen nach der Installation auf derselben Services-Oberfläche. Das CodeIgniter-Paket stellt die passenden Service-Methoden bereit. Jede davon gibt null zurück, bis das passende Premium-Paket installiert ist. Siehe </get-license/?intent=codeigniter>.
Siehe auch
Abschnitt betitelt „Siehe auch“- /integrations/codeigniter/boot-and-discovery/ — Discovery-Interna.
- /integrations/codeigniter/install/ — Versionsbeschränkungen und Verifizierung.
- /integrations/codeigniter/quickstart/ — das erste PDF.
- /integrations/codeigniter/production-usage/ — per DI verdrahtete Controller und der Queue-Job.
- /integrations/codeigniter/configuration/ — alle Konfigurationsschlüssel.