Zum Inhalt springen

NextPDF-Integration für CodeIgniter

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.

Terminal-Fenster
composer require nextpdf/codeigniter

Sie müssen weder einen Service-Provider bearbeiten noch eine Bootstrap-Datei ändern. Unter /integrations/codeigniter/install/ finden Sie die geprüften Versionsbeschränkungen.

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.

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-NameRückgabeStandard-Lebensdauer
fontRegistryFontRegistryInterfacegeteilt
imageRegistryImageRegistrygeteilt
documentFactoryDocumentFactoryInterfacegeteilt
pdfDocumentDocumentneu
pdfPdfneu
tsaClient?TsaClientgeteilt
pdfSigner?SignerInterfaceneu

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

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 = 100
nextpdf.signature.enabled = true
nextpdf.signature.certificate = /etc/nextpdf/cert.pem

/integrations/codeigniter/configuration/ dokumentiert alle Schlüssel und die Regel zum Überschreiben von Arrays.

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.

  • Wenn die Host-Anwendung die Composer-Discovery abschaltet, fügen Sie nextpdf/codeigniter zu Config\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() und Services::tsaClient() geben null zurück, bis das Signieren oder eine TSA-URL konfiguriert ist. Das ist beabsichtigte graceful Degradation, kein Fehler.
  • Klassenpfadabbildung für die Modul-Discovery (PSR-4 Autoloader §x1.x3).
  • Service-Locator-Leitlinie für das Bindings-Modell (PSR-11 Container §1.3).

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

  • /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.