Avvio rapido — il primo PDF in CodeIgniter 4
In sintesi
Sezione intitolata “In sintesi”Risolvere il servizio pdf in un controller, aggiungere contenuto al documento associato e restituire una risposta di download: tre righe di lavoro e una sola risposta HTTP.
Installazione
Sezione intitolata “Installazione”composer require nextpdf/codeigniterPer verificare i requisiti e il rilevamento del pacchetto, vedere /integrations/codeigniter/install/.
Passo 1 — Generare un controller
Sezione intitolata “Passo 1 — Generare un controller”Creare un controller che restituisce un PDF. La libreria Pdf incapsula un nuovo documento per chi la usa, quindi trasforma quel documento in un DownloadResponse di CodeIgniter.
Ogni esempio PHP in questa pagina dichiara declare(strict_types=1); dopo il tag di apertura, su una riga a sé (PSR-12 §x1.x3.p11; §x1.x3.p34).
<?php
declare(strict_types=1);
namespace App\Controllers;
use CodeIgniter\HTTP\DownloadResponse;use NextPDF\CodeIgniter\Config\Services;
final class InvoiceController extends BaseController{ public function download(int $id): DownloadResponse { $pdf = Services::pdf();
$pdf->document()->addPage(); $pdf->document()->cell(0, 10, "Invoice #{$id}");
return $pdf->download("invoice-{$id}.pdf"); }}Services::pdf() restituisce una nuova istanza di Pdf. Anche il documento sottostante è nuovo a ogni chiamata, come verificato dalla suite di test funzionali del pacchetto. La chiamata download() produce un DownloadResponse con disposition attachment.
Passo 2 — Aggiungere una route
Sezione intitolata “Passo 2 — Aggiungere una route”Mappare una route al metodo del controller in app/Config/Routes.php:
$routes->get('invoices/(:num)/pdf', 'InvoiceController::download/$1');Passo 3 — Richiedere il PDF
Sezione intitolata “Passo 3 — Richiedere il PDF”Aprire /invoices/42/pdf. Il browser scarica invoice-42.pdf. La risposta include Content-Type: application/pdf e le intestazioni di hardening applicate dal pacchetto alla risposta.
Variante — anteprima inline con l’helper
Sezione intitolata “Variante — anteprima inline con l’helper”L’helper globale pdf() è equivalente a Services::pdf(). Per visualizzare il PDF nel browser anziché scaricarlo, chiamare inline():
<?php
declare(strict_types=1);
namespace App\Controllers;
use CodeIgniter\HTTP\DownloadResponse;
final class ReportController extends BaseController{ public function preview(): DownloadResponse { $pdf = pdf();
$pdf->document()->addPage(); $pdf->document()->cell(0, 10, 'Monthly Report');
return $pdf->inline('report.pdf'); }}Variante — documento diretto e PdfResponse
Sezione intitolata “Variante — documento diretto e PdfResponse”Quando si dispone già di un Document, creare la risposta direttamente con PdfResponse. L’helper pdf_document() fornisce un nuovo documento preconfigurato.
<?php
declare(strict_types=1);
namespace App\Controllers;
use CodeIgniter\HTTP\DownloadResponse;use NextPDF\CodeIgniter\Http\PdfResponse;
final class DocumentController extends BaseController{ public function generate(): DownloadResponse { $document = pdf_document(); $document->addPage(); $document->cell(0, 10, 'Hello World');
return PdfResponse::download($document, 'hello.pdf'); }}Cosa è stato creato
Sezione intitolata “Cosa è stato creato”- Un controller che risolve un servizio NextPDF e restituisce un
DownloadResponsecon tipo dichiarato. - Due punti di ingresso equivalenti: la classe
Servicese gli helperpdf()/pdf_document(). - Una risposta che include
application/pdfe le intestazioni di sicurezza del pacchetto, con un nome di file sanitizzato.
Passi successivi
Sezione intitolata “Passi successivi”Per mantenere chiara questa prima introduzione, il tutorial tralascia la gestione degli errori. Per i controller di produzione — dependency injection, gestione delle eccezioni, osservabilità e job in coda — proseguire con /integrations/codeigniter/production-usage/. Quella pagina illustra le varianti rafforzate.
Conformità
Sezione intitolata “Conformità”- Tag PHP di apertura su una riga a sé negli esempi di codice (PSR-12 Extended Coding Style §x1.x3.p11).
- Forma dell’istruzione declare(strict_types=1) negli esempi di codice (PSR-12 Extended Coding Style §x1.x3.p34).
Vedere anche
Sezione intitolata “Vedere anche”- /integrations/codeigniter/overview/ — tutta la superficie dell’API.
- /integrations/codeigniter/configuration/ — modificare le impostazioni predefinite e i percorsi.
- /integrations/codeigniter/production-usage/ — controller di livello produzione e job asincroni.
- /integrations/codeigniter/troubleshooting/ — quando una route non restituisce alcun PDF.