Ga naar inhoud

NextPDF Symfony-integratie

Installeer nextpdf/symfony, laat Flex de bundle registreren of registreer deze zelf, voeg config/packages/nextpdf.yaml toe en injecteer PdfFactory. Gebruik deze pagina als overzicht van de bedrading. Elke stap verwijst naar een uitgebreidere handleiding.

Terminal window
composer require nextpdf/symfony

De bundle vereist nextpdf/core^3.0 || ^5.2, symfony/*^7.2 en psr/log^3.0. Klassen worden automatisch geladen via het PSR-4-prefix NextPDF\Symfony\, dat aan src/Symfony/ is toegewezen. Een PSR-4-autoloader koppelt dat namespace-prefix aan de basismap (PSR-4 §2). Zie /integrations/symfony/install/ voor de volledige vereisten en optionele pakketten.

Met Symfony Flex registreert de vermelding extra.symfony.bundles in de composer.json van de bundle NextPDF\Symfony\NextPdfBundle voor alle omgevingen. Zonder Flex voeg je deze zelf toe aan config/bundles.php:

return [
NextPDF\Symfony\NextPdfBundle::class => ['all' => true],
];

Zie /integrations/symfony/boot-and-discovery/ voor de volledige bootsequentie en het gedrag van de compiler pass.

Het bestand config/services.php van de bundle registreert deze services:

Service / aliasLevenscyclus
NextPDF\Symfony\Service\PdfFactorygedeeld, publiek; injecteer deze
nextpdf.documentPdfDocumentInterfaceDocumentniet-gedeeld, publiek; nieuw bij elke resolve
NextPDF\Contracts\FontRegistryInterfacegedeeld, vergrendeld na warmup
NextPDF\Graphics\ImageRegistrygedeeld, kernel.reset
NextPDF\Contracts\DocumentFactoryInterfacegedeeld
NextPDF\Symfony\Http\PdfResponsepublieke, stateless helper

De document-binding is bewust niet-gedeeld. PSR-11 staat toe dat een container bij opeenvolgende get()-aanroepen voor één identifier verschillende waarden teruggeeft. Een nieuw document voorkomt dat toestand tussen verzoeken blijft hangen in langlopende workers (PSR-11 §1.1.2). Zie /integrations/symfony/configuration/ voor de volledige service- en aliastabel, inclusief voorwaardelijke EInvoice-bindingen.

De configuratie-alias is nextpdf. Maak config/packages/nextpdf.yaml aan. Wanneer Flex een recipe publiceert, voegt het automatisch een standaardkopie voor je toe. Elke sleutel heeft een standaardwaarde, dus een minimaal bestand ziet er zo uit:

nextpdf: ~

De volledige configuratieboom is gedocumenteerd in /integrations/symfony/configuration/.

Injecteer PdfFactory en retourneer vervolgens het document met PdfResponse:

src/Controller/PdfController.php
<?php
declare(strict_types=1);
namespace App\Controller;
use NextPDF\Symfony\Http\PdfResponse;
use NextPDF\Symfony\Service\PdfFactory;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
final class PdfController
{
#[Route('/hello.pdf', name: 'hello_pdf')]
public function hello(PdfFactory $pdf): Response
{
$doc = $pdf->create();
$doc->addPage();
$doc->cell(0, 10, 'Hello from NextPDF on Symfony.');
return PdfResponse::inline($doc, 'hello.pdf');
}
}

Zie /integrations/symfony/quickstart/ voor de end-to-end-controller en het asynchrone Messenger-pad.

Controleer de bedrading zonder applicatiecode te schrijven:

Terminal window
php bin/console debug:container nextpdf
php bin/console debug:config nextpdf
php bin/console lint:container

debug:container nextpdf moet PdfFactory, de alias nextpdf.document en de registries tonen. lint:container controleert of elk service-argument wordt opgelost. Voeg de bovenstaande controller toe om de generatie te testen en vraag vervolgens /hello.pdf op.

Het API-oppervlak ondersteunt deze publieke symbolen voor applicatiecode:

SymboolDoel
NextPDF\Symfony\Service\PdfFactory::create()nieuw, vooraf geconfigureerd Document
NextPDF\Symfony\Http\PdfResponse::inline() / download()gebufferde response met beveiligingsheaders
NextPDF\Symfony\Http\PdfResponse::streamInline() / streamDownload()in chunks gestreamde response
NextPDF\Symfony\Message\GeneratePdfMessagedata transfer object (DTO) voor asynchrone generatie (gevalideerd)
NextPDF\Symfony\Message\PdfBuilderInterfacebuildercontract dat door de handler wordt opgelost

Elke rij vermeldt een normatieve bewering op deze pagina. Elke bewering is vastgepind aan een volledige 64-hex reference_id uit het afgeschermde corpus van de standards development organization (SDO). De herkomst (corpus-manifest en ophaaltransport) staat in _sidecars/rag-citations.yaml.

SpecificatieClausulereference_idBewering
PSR-11psr_11_container#1.1.2.p4Identifier-contract van container has()/get()
PSR-4psr_4_autoload#x1.x2.p5Namespace-toewijzing van de autoloader
  • /integrations/symfony/install/ — vereisten en registratie.
  • /integrations/symfony/boot-and-discovery/ — detectie, booten en compiler pass.
  • /integrations/symfony/configuration/ — volledig schema en servicetabel.
  • /integrations/symfony/quickstart/ — uitvoerbare controller en async-voorbeeld.
  • /integrations/symfony/production-usage/ — workerveiligheid en streaming.