Ga naar inhoud

CodeIgniter-ontwikkelaarsgids

Het CodeIgniter-pakket biedt servicefactory’s, helperfuncties en een kleine wrapper rond de Pdf-library voor één Portable Document Format-document (PDF). Gebruik de wrapper in controllers. Wachtrijverwerking gebruikt statische builder-callables, omdat CodeIgniter-wachtrijpayloads geserialiseerde data moeten zijn.

Gebruik deze gids voor het ontwerpen van controllerstromen, services, wachtrijbuilders en tests rond nextpdf/codeigniter.

LaagBeheerd doorVerantwoordelijkheidHier niet plaatsen
ControllerApplicatieAutoriseer, roep een builder of service aan en retourneer een DownloadResponse.Gedeelde lay-outlogica.
Librarywrappernextpdf/codeigniterWrap één Document en bied helpers voor responses en opslag.Langdurige documentopslag.
Servicefactorynextpdf/codeigniterMaak gedeelde registry’s en nieuwe documenten.Bedrijfsspecifieke opslagroots.
WachtrijbuilderApplicatieBouw een document op vanuit statische callable-invoer.Request-objecten of status die niet geserialiseerd kunnen worden.
Core-enginenextpdf/nextpdfBouw en serialiseer de PDF.CodeIgniter-respons of wachtrijbeleid.
FaseGedragOntwikkelaarsactie
Autoload-registratieRegistrar::Autoload() registreert het laden van modulehelpers.Laad de module via de CodeIgniter-configuratie.
ServiceresolutieServices::pdf() retourneert standaard een wrapper rond een nieuw document.Los de service één keer per request op.
OpstellenApplicatiecode gebruikt Pdf::document() voor aanroepen op het core-document.Houd code voor het opbouwen van documenten in services of builders.
ResponsPdfResponse retourneert een DownloadResponse.Laat het pakket de PDF-headers instellen.
WachtrijuitvoeringGeneratePdfJob::process() valideert de builder en het uitvoerpad en slaat het document vervolgens op.Plaats wachtrijbuilders onder App\PdfBuilders.
PadDoel
app/PdfBuilders/*Statische, wachtrijveilige builders die door GeneratePdfJob worden geaccepteerd.
app/Libraries/*Optionele applicatiewrappers rond herhaalde documentworkflows.
app/Services/*Ophalen van domeingegevens en opslagbeleid.
app/Config/NextPdf.phpApplicatieoverschrijvingen voor de pakketconfiguratie.
tests/app/PdfBuilders/*Tests voor builders en wachtrijpayloads.

Gebruik pakkethelpers voor korte stromen. Gebruik expliciete service-aanroepen wanneer documentconstructie thuishoort in een klasse die je rechtstreeks kunt testen.

<?php
namespace App\Controllers;
final class InvoiceController extends BaseController
{
public function download(int $id)
{
$pdf = pdf();
$pdf->document()
->setTitle('Invoice ' . $id)
->addPage()
->writeHtml('<h1>Invoice ' . $id . '</h1>');
return $pdf->download('invoice-' . $id . '.pdf');
}
}

Wachtrijbuilders moeten statisch en deterministisch zijn en zich onder App\PdfBuilders bevinden. Houd de context-array eenvoudig genoeg om te serialiseren en te auditen.

<?php
namespace App\PdfBuilders;
use NextPDF\Core\Document;
final class InvoiceBuilder
{
public static function build(Document $document, array $context): Document
{
$document->setTitle((string) $context['title'])
->addPage()
->writeHtml((string) $context['html']);
return $document;
}
}

De job beperkt de uitvoer tot de geconfigureerde PDF-map van de applicatie. Als je applicatie tenant-specifieke opslag nodig heeft, plaats dat beleid dan in één service en test het voordat je de job verzendt.

UitbreidingspuntGebruik dit voorBeperking
Services::pdfDocument()Pas het aanmaken van documenten aan.Moet een nieuw document retourneren.
Services::fontRegistry()Warm lettertypen op en gebruik de registry.Wijs onveilige paden af en houd de registry vergrendeld na het opwarmen.
Services::pdfSigner()Schakel optionele digitale ondertekening in.Retourneer null wanneer ondertekening is uitgeschakeld.
NextPDF\CodeIgniter\Libraries\PdfWikkel controllergericht documentwerk in.Eén wrapper komt overeen met één document.
App\PdfBuilders::*Wachtrijveilige documentbuilders.Statische callable-string vereist.
app/Config/NextPdf.phpStandaardwaarden van de applicatie en integratie-instellingen.Houd productiewaarden expliciet.
  1. Begin met een controller die pdf() of service('pdf') aanroept.
  2. Verplaats herhaalde documentconstructie naar app/PdfBuilders of een applicatieservice.
  3. Gebruik GeneratePdfJob wanneer het genereren te traag is voor het requestpad.
  4. Houd de wachtrijcontext serialiseerbaar en klein.
  5. Sla de uitvoer op onder de goedgekeurde PDF-opslagroot, tenzij je het beleid bewust uitbreidt.
  6. Voeg tests toe voor helpers, services, wachtrijpayloads en onveilige paden.
FoutWaar het moet worden afgehandeldAanbevolen respons
Ontbrekende extensie of onveilig lettertypepadServicefactory.Faal snel tijdens de serviceresolutie.
Ongeldige builder-callableValidatie van de wachtrijjob.Wijs de job af en log de builder-string zonder geheimen.
Onveilig uitvoerpadOpslagservice en wachtrijjob.Wijs af voordat je de job verzendt en behoud de jobvalidatie.
Serialisatiefout in de responsFoutafhandeling in de controller of het framework.Verstuur geen gedeeltelijke responsbody.
Optionele Premium-klasse niet beschikbaarRetourwaarde van de servicemethode.Handel null expliciet af voordat je optionele e-invoicefuncties gebruikt.
AandachtspuntStandaardWanneer overschrijven
Namespace voor wachtrijbuildersApp\PdfBuilders.Houd de standaard aan, tenzij je ook het beveiligingsbeleid bijwerkt.
UitvoerrootWRITEPATH/pdfs.Overschrijf alleen met een striktere allowlist.
Bestandsnaam van de responsdocument.pdf.Gebruik opgeschoonde zakelijke bestandsnamen.
StreammethodenPariteit van de application programming interface (API) met andere frameworks.Vertrouw in CodeIgniter niet op streaming als geheugengrens.
DocumentserviceStandaard een nieuw document.Vraag geen gedeelde documenten op vanuit requestcode.
  • Servicetests verifiëren dat elke Services::pdf()-resolutie een onafhankelijk document retourneert.
  • Helpertests verifiëren dat pdf() en pdf_document() nieuwe objecten retourneren.
  • Responstests verifiëren de headers en de normalisatie van bestandsnamen.
  • Wachtrijtests dekken ongeldige builder-strings en onveilige uitvoerpaden.
  • Buildertests gebruiken representatieve contextgegevens.
  • Configuratietests dekken het lettertypepad, het cachepad, uitgeschakelde ondertekening en de uitgeschakelde status van de Time-Stamp Authority (TSA).