Ga naar inhoud

NextPDF CodeIgniter-integratie

Installeer het pakket; CodeIgniter 4 koppelt het automatisch voor je in. Gebruik deze pagina om te controleren of de integratie goed is aangesloten: discovery, het bindingsmodel, configuratiepublicatie en een smoke-test met één methode die aantoont dat de integratie werkt.

Terminal window
composer require nextpdf/codeigniter

Je hoeft geen serviceprovider te bewerken en ook geen bootstrap-bestand aan te passen. Zie /integrations/codeigniter/install/ voor de geverifieerde versie-eisen.

CodeIgniter 4 vindt het pakket via Composer package discovery wanneer Config\Modules::$discoverInComposer op true staat, de standaardinstelling van het framework. De PHP Standard Recommendation 4 (PSR-4)-prefix NextPDF\CodeIgniter\ wordt gemapt naar src/CodeIgniter/, zodat het framework NextPDF\CodeIgniter\Config\Services naar het bijbehorende bestand kan resolven (PSR-4 §x1.x3). /integrations/codeigniter/boot-and-discovery/ documenteert de volledige volgorde en de eigenschappen van Config\Modules die dit bepalen.

CodeIgniter 4 wordt niet geleverd met een PSR-11-container. PSR-11 §1.3 raadt het service-locatorpatroon af (modaal SHOULD NOT). Het pakket volgt de locatorconventie van het framework en houdt die zo beperkt mogelijk. Elke binding is een benoemde statische factory met een bool $getShared-parameter.

ServicenaamRetourneertStandaardlevensduur
fontRegistryFontRegistryInterfacegedeeld
imageRegistryImageRegistrygedeeld
documentFactoryDocumentFactoryInterfacegedeeld
pdfDocumentDocumentvers
pdfPdfvers
tsaClient?TsaClientgedeeld
pdfSigner?SignerInterfacevers

Gebruik een van deze twee ingangspunten; ze zijn equivalent:

<?php
declare(strict_types=1);
use NextPDF\CodeIgniter\Config\Services;
$a = Services::pdf(false); // direct
$b = \service('pdf'); // helper → Services::pdf()

De globale helpers pdf() en pdf_document() zijn wrappers rond Services::pdf(false) en Services::pdfDocument(false).

De pakketconfiguratie staat in NextPDF\CodeIgniter\Config\NextPdf, een niet-finale BaseConfig. Je kunt deze op een van de twee ondersteunde manieren overschrijven:

1. Breid de klasse uit (getypeerd, versiebeheerd). Maak 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 laadt je applicatieklasse in plaats van de standaardklasse van het pakket.

2. Overschrijven met .env (per omgeving). Gebruik de korte klassenaam in kleine letters, nextpdf, als prefix:

nextpdf.imageCacheMb = 100
nextpdf.signature.enabled = true
nextpdf.signature.certificate = /etc/nextpdf/cert.pem

/integrations/codeigniter/configuration/ documenteert elke sleutel en de regel voor het overschrijven van arrays.

CodeIgniter heeft geen serviceprovider of bundle-klasse die je kunt testen. Gebruik de equivalente smoke-test om twee dingen te controleren: of discovery de services heeft geresolved en of de levensduren zich gedragen zoals gespecificeerd. De onderstaande controlleractie is uitvoerbaar en weerspiegelt de functionele assertions van het pakket zelf.

<?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,
]);
}
}

Koppel een route aan deze actie en roep die vervolgens op. Een 200-respons met alle vlaggen op true toont aan dat de integratie werkt. Elke assertion hier komt overeen met gedrag dat in de functionele testsuite van het pakket is geverifieerd.

  • Als de hostapplicatie Composer-discovery uitschakelt, voeg dan nextpdf/codeigniter toe aan Config\Modules::$composerPackages['only'].
  • Services::pdfDocument(true) retourneert een gedeeld document. Deze optie bestaat alleen voor het resetten van tests. Vraag het gedeelde document nooit op in request- of jobcode.
  • Services::pdfSigner() en Services::tsaClient() retourneren null totdat ondertekening of een Time-Stamping Authority (TSA)-endpoint is geconfigureerd. Dit is bewuste graceful degradation, geen fout.
  • Class-path-mapping voor module-discovery (PSR-4 Autoloader §x1.x3).
  • Service-locatorrichtlijn voor het bindingsmodel (PSR-11 Container §1.3).

NextPDF core valt onder Apache-2.0. Nadat je Pro of Enterprise hebt geïnstalleerd, verschijnen de bijbehorende services op dezelfde Services-API. Het CodeIgniter-pakket stelt de bijbehorende servicemethoden beschikbaar. Elke methode retourneert null totdat je het bijbehorende Premium-pakket installeert. Zie </get-license/?intent=codeigniter>.

  • /integrations/codeigniter/boot-and-discovery/ — interne werking van discovery.
  • /integrations/codeigniter/install/ — versiebeperkingen en verificatie.
  • /integrations/codeigniter/quickstart/ — eerste PDF.
  • /integrations/codeigniter/production-usage/ — via dependency injection ingekoppelde controllers en de queue-job.
  • /integrations/codeigniter/configuration/ — elke configuratiesleutel.