Salta ai contenuti

Guida per sviluppatori CodeIgniter

Il pacchetto CodeIgniter espone factory di servizio, funzioni di supporto e un piccolo wrapper di libreria Pdf per un singolo documento. Il wrapper è pratico nei controller. L’elaborazione in coda usa builder callable statici perché i payload delle code di CodeIgniter sono dati serializzati.

Usare questa guida per progettare flussi di controller, servizi, builder di coda o test attorno a nextpdf/codeigniter.

LivelloDi proprietà diResponsabilitàDa non collocare qui
ControllerApplicazioneAutorizzare, richiamare un builder o un servizio, restituire un DownloadResponse.Logica di layout condivisa.
Wrapper di librerianextpdf/codeigniterIncapsulare un singolo Document e fornire helper response/save.Archiviazione di documenti a lunga durata.
Factory di servizionextpdf/codeigniterCreare registry condivisi e nuovi documenti.Radici di archiviazione specifiche per l’azienda.
Builder di codaApplicazioneCostruire un documento a partire da un input callable statico.Oggetti request o stato non serializzabile.
Motore principalenextpdf/nextpdfCostruire e serializzare il PDF.Policy di risposta o di coda CodeIgniter.
FaseComportamentoAzione dello sviluppatore
Registrazione dell’autoloadRegistrar::Autoload() registra il caricamento degli helper per il modulo.Caricare il modulo tramite la configurazione di CodeIgniter.
Risoluzione del servizioServices::pdf() restituisce per impostazione predefinita un wrapper per un nuovo documento.Risolverlo una sola volta per richiesta.
CreazioneIl codice applicativo usa Pdf::document() per chiamare il documento principale.Mantenere il codice di costruzione del documento nei servizi o nei builder.
RispostaPdfResponse restituisce un DownloadResponse.Lasciare che il pacchetto imposti gli header PDF.
Esecuzione in codaGeneratePdfJob::process() convalida il builder e il percorso di output, quindi salva il documento.Collocare i builder di coda sotto App\PdfBuilders.
PercorsoScopo
app/PdfBuilders/*Builder statici e sicuri per le code, accettati da GeneratePdfJob.
app/Libraries/*Wrapper applicativi opzionali per workflow documentali ricorrenti.
app/Services/*Recupero dei dati di dominio e policy di archiviazione.
app/Config/NextPdf.phpOverride applicativi per la configurazione del pacchetto.
tests/app/PdfBuilders/*Test dei builder e dei payload di coda.

Usare gli helper del pacchetto per i flussi brevi. Usare chiamate di servizio esplicite quando la costruzione del documento appartiene a una classe da testare direttamente.

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

I builder di coda dovrebbero essere statici, deterministici e collocati sotto App\PdfBuilders. Mantenere l’array di contesto abbastanza semplice da poter essere serializzato e verificato.

<?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;
}
}

Il job limita l’output alla directory PDF configurata dell’applicazione. Se l’applicazione necessita di archiviazione specifica per tenant, collocare tale policy in un unico servizio e testarla prima dell’invio in coda.

Punto di estensioneDa usare perVincolo
Services::pdfDocument()Personalizzazione della creazione del documento.Deve restituire un nuovo documento.
Services::fontRegistry()Warm-up dei font e accesso al registry.Rifiutare i percorsi non sicuri e mantenere il registry bloccato dopo il warm-up.
Services::pdfSigner()Firma digitale opzionale.Restituisce null quando la firma è disabilitata.
NextPDF\CodeIgniter\Libraries\PdfWrapper destinato ai controller.Un wrapper corrisponde a un singolo documento.
App\PdfBuilders::*Builder di documenti sicuri per le code.È richiesta una stringa callable statica.
app/Config/NextPdf.phpImpostazioni predefinite dell’applicazione e parametri di integrazione.Mantenere espliciti i valori di produzione.
  1. Iniziare con un controller che richiama pdf() o service('pdf').
  2. Spostare la costruzione ricorrente dei documenti in app/PdfBuilders o in un servizio dell’applicazione.
  3. Usare GeneratePdfJob quando la generazione è troppo lenta per il percorso della richiesta.
  4. Mantenere il contesto della coda serializzabile e di dimensioni ridotte.
  5. Archiviare l’output sotto la radice di archiviazione PDF approvata, a meno che non si estenda deliberatamente la policy.
  6. Aggiungere test per helper, servizi, payload di coda e percorsi non sicuri.
ErroreDove dovrebbe essere gestitoRisposta consigliata
Estensione mancante o percorso di font non sicuroFactory di servizio.Fallire rapidamente durante la risoluzione del servizio.
Builder callable non validoConvalida del job di coda.Rifiutare il job e registrare la stringa del builder senza segreti.
Percorso di output non sicuroServizio di archiviazione e job di coda.Rifiutare prima dell’invio e mantenere la convalida del job.
Errore di serializzazione della rispostaGestione degli errori del controller o del framework.Non inviare un corpo di risposta parziale.
Classe Premium opzionale non disponibileValore restituito dal metodo di servizio.Gestire null esplicitamente prima di usare le funzionalità opzionali di fatturazione elettronica.
AspettoPredefinitoQuando eseguire l’override
Namespace del builder di codaApp\PdfBuilders.Mantenere il valore predefinito a meno che non si aggiorni anche la policy di sicurezza.
Radice di outputWRITEPATH/pdfs.Eseguire l’override solo con una allowlist più restrittiva.
Nome del file di rispostadocument.pdf.Usare nomi di file aziendali sanificati.
Metodi di streamingParità di API con altri framework.Non fare affidamento sullo streaming come meccanismo di limitazione della memoria in CodeIgniter.
Servizio documentoNuovo per impostazione predefinita.Non richiedere documenti condivisi nel codice della richiesta.
  • I test dei servizi verificano che ogni risoluzione di Services::pdf() restituisca un documento indipendente.
  • I test degli helper verificano che pdf() e pdf_document() restituiscano nuovi oggetti.
  • I test di risposta verificano gli header e la normalizzazione del nome del file.
  • I test di coda coprono stringhe di builder non valide e percorsi di output non sicuri.
  • I test dei builder vengono eseguiti con dati di contesto rappresentativi.
  • I test di configurazione coprono il percorso dei font, il percorso della cache, la firma disabilitata e gli stati con TSA disabilitato.