Aller au contenu

Intégration NextPDF pour CodeIgniter

Installe le paquet : CodeIgniter 4 s’occupe du câblage pour toi. Cette page sert de référence pour ce câblage. Elle couvre la découverte, le modèle de liaisons, la publication de la configuration et un test de fumée en une seule méthode qui prouve que l’intégration fonctionne.

Fenêtre de terminal
composer require nextpdf/codeigniter

Tu n’as pas à modifier de fournisseur de services ni de fichier d’amorçage. Consulte /integrations/codeigniter/install/ pour les contraintes de version vérifiées.

CodeIgniter 4 trouve le paquet grâce à la découverte de paquets Composer. C’est le cas lorsque Config\Modules::$discoverInComposer vaut true, la valeur par défaut du framework. Le préfixe PSR-4 NextPDF\CodeIgniter\ correspond à src/CodeIgniter/. Grâce à cette correspondance, le framework résout NextPDF\CodeIgniter\Config\Services vers son fichier (PSR-4 §x1.x3). /integrations/codeigniter/boot-and-discovery/ documente la séquence complète et les propriétés Config\Modules qui la régissent.

CodeIgniter 4 ne fournit aucun conteneur PSR-11. PSR-11 §1.3 déconseille le patron service-locator (modalité SHOULD NOT). Le paquet suit la convention de localisateur du framework, mais la garde minimale. Chaque liaison correspond à une unique fabrique statique nommée, dotée d’un paramètre bool $getShared.

Nom du serviceRenvoieDurée de vie par défaut
fontRegistryFontRegistryInterfacepartagé
imageRegistryImageRegistrypartagé
documentFactoryDocumentFactoryInterfacepartagé
pdfDocumentDocumentneuf
pdfPdfneuf
tsaClient?TsaClientpartagé
pdfSigner?SignerInterfaceneuf

Résous les services depuis l’un ou l’autre point d’entrée — ils sont équivalents :

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

Les helpers globaux pdf() et pdf_document() ne sont que de fines enveloppes autour de Services::pdf(false) et Services::pdfDocument(false).

La configuration du paquet réside dans NextPDF\CodeIgniter\Config\NextPdf, un BaseConfig non final. Deux méthodes prises en charge permettent de la surcharger :

1. Étends la classe (typée, versionnée). Crée 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 charge ta classe d’application à la place de la valeur par défaut du paquet.

2. Surcharge avec .env (par environnement). Le préfixe est le nom de classe court en minuscules, nextpdf :

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

/integrations/codeigniter/configuration/ documente chaque clé et la règle de surcharge des tableaux.

Test de fumée du fournisseur de services / du bundle

Section intitulée « Test de fumée du fournisseur de services / du bundle »

CodeIgniter n’a aucune classe de fournisseur de services ni de bundle à tester. À la place, le test de fumée équivalent vérifie deux choses : que la découverte a résolu les services, et que les durées de vie se comportent comme spécifié. Le test ci-dessous est une action de contrôleur exécutable qui reflète les assertions fonctionnelles du paquet.

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

Associe une route à cette action, puis appelle-la. Une réponse 200 avec tous les indicateurs à true prouve l’intégration. Chaque assertion ici correspond à un comportement vérifié dans la suite de tests fonctionnels du paquet.

  • Si l’application hôte désactive la découverte Composer, ajoute nextpdf/codeigniter à Config\Modules::$composerPackages['only'].
  • Services::pdfDocument(true) renvoie un document partagé. Il n’existe que pour la réinitialisation des tests. Ne demande jamais le document partagé dans du code de requête ni dans un job.
  • Services::pdfSigner() et Services::tsaClient() renvoient null tant que la signature ou une URL TSA n’est pas configurée. Il s’agit d’un comportement de repli volontaire, pas d’un échec.
  • Correspondance entre classe et chemin pour la découverte de modules (PSR-4 Autoloader §x1.x3).
  • Recommandation sur le service-locator pour le modèle de liaisons (PSR-11 Container §1.3).

Le cœur de NextPDF est sous licence Apache-2.0. Les services Pro et Enterprise apparaissent sur la même surface Services une fois installés. Le paquet CodeIgniter expose les méthodes de service correspondantes. Chacune renvoie null tant que le paquet Premium correspondant n’est pas installé. Voir </get-license/?intent=codeigniter>.

  • /integrations/codeigniter/boot-and-discovery/ — rouages internes de la découverte.
  • /integrations/codeigniter/install/ — contraintes de version et vérification.
  • /integrations/codeigniter/quickstart/ — premier PDF.
  • /integrations/codeigniter/production-usage/ — contrôleurs câblés par injection et job de file d’attente.
  • /integrations/codeigniter/configuration/ — chaque clé de configuration.