Zum Inhalt springen

Symfony-Integration mit NextPDF

Installieren Sie nextpdf/symfony, lassen Sie Flex das Bundle registrieren (oder registrieren Sie es selbst), fügen Sie config/packages/nextpdf.yaml hinzu und injizieren Sie PdfFactory. Diese Seite ist der zentrale Überblick zur Verdrahtung. Jeder Schritt verweist auf eine ausführlichere Seite.

Terminal-Fenster
composer require nextpdf/symfony

Das Bundle benötigt nextpdf/core^3.0 || ^5.2, symfony/*^7.2 und psr/log^3.0. Die Klassen werden über das PSR-4-Präfix NextPDF\Symfony\ automatisch geladen, das auf src/Symfony/ abgebildet ist. Ein PSR-4-Autoloader ordnet das Namespace-Präfix diesem Basisverzeichnis zu (PSR-4 §2). Die vollständigen Anforderungen und die optionalen Pakete finden Sie unter /integrations/symfony/install/.

Wenn Sie Symfony Flex verwenden, registriert der Eintrag extra.symfony.bundles in der composer.json des Bundles NextPDF\Symfony\NextPdfBundle für alle Umgebungen. Ohne Flex fügen Sie es selbst in config/bundles.php ein:

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

Die vollständige Boot-Sequenz und das Verhalten des Compiler-Passes finden Sie unter /integrations/symfony/boot-and-discovery/.

Die Datei config/services.php des Bundles registriert die folgenden Services:

Service / AliasLebenszyklus
NextPDF\Symfony\Service\PdfFactoryshared, public — für die Injektion verwenden
nextpdf.documentPdfDocumentInterfaceDocumentnon-shared, public — bei jeder Auflösung neu
NextPDF\Contracts\FontRegistryInterfaceshared, nach dem Warmup gesperrt
NextPDF\Graphics\ImageRegistryshared, kernel.reset
NextPDF\Contracts\DocumentFactoryInterfaceshared
NextPDF\Symfony\Http\PdfResponseöffentlicher, zustandsloser Helfer

Die Document-Bindung ist bewusst non-shared. Nach PSR-11 darf ein Container bei aufeinanderfolgenden get()-Aufrufen für dieselbe ID unterschiedliche Werte zurückgeben. Ein frisches Document verhindert, dass in lang laufenden Workern Zustand über Anfragegrenzen hinweg erhalten bleibt (PSR-11 §1.1.2). Die vollständige Service- und Alias-Tabelle einschließlich der bedingten EInvoice-Bindungen finden Sie unter /integrations/symfony/configuration/.

Der Konfigurations-Alias lautet nextpdf. Legen Sie config/packages/nextpdf.yaml an. Wenn ein Flex-Recipe veröffentlicht wird, legt es für Sie eine Standardkopie ab. Da jeder Schlüssel einen Standardwert hat, sieht eine minimale Datei so aus:

nextpdf: ~

Der vollständige Konfigurationsbaum ist unter /integrations/symfony/configuration/ dokumentiert.

Injizieren Sie PdfFactory und geben Sie das Ergebnis anschließend über PdfResponse zurück:

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

Den vollständigen Controller und den asynchronen Messenger-Pfad finden Sie unter /integrations/symfony/quickstart/.

Prüfen Sie die Verdrahtung, ohne Anwendungscode zu schreiben:

Terminal-Fenster
php bin/console debug:container nextpdf
php bin/console debug:config nextpdf
php bin/console lint:container

debug:container nextpdf sollte PdfFactory, den nextpdf.document-Alias und die Registries auflisten. lint:container prüft, ob jedes Service-Argument aufgelöst wird. Um die Generierung zu testen, fügen Sie den Controller von oben hinzu und rufen anschließend /hello.pdf auf.

Dies sind die unterstützten öffentlichen Symbole für Anwendungscode:

SymbolZweck
NextPDF\Symfony\Service\PdfFactory::create()frisches, vorkonfiguriertes Document
NextPDF\Symfony\Http\PdfResponse::inline() / download()gepufferte Antwort mit Sicherheits-Headern
NextPDF\Symfony\Http\PdfResponse::streamInline() / streamDownload()in Chunks gestreamte Antwort
NextPDF\Symfony\Message\GeneratePdfMessageDTO für die asynchrone Generierung (validiert)
NextPDF\Symfony\Message\PdfBuilderInterfaceBuilder-Vertrag, der vom Handler aufgelöst wird

Jede Zeile enthält eine normative Aussage dieser Seite. Jede Aussage ist an eine vollständige 64-stellige Hex-reference_id aus dem gegateten SDO-Korpus gebunden. Die Provenance-Daten (Korpus-Manifest, Retrieval-Transport) stehen in _sidecars/rag-citations.yaml.

SpezifikationKlauselreference_idAussage
PSR-11psr_11_container#1.1.2.p4Identifier-Vertrag für Container-has()/get()
PSR-4psr_4_autoload#x1.x2.p5Namespace-Zuordnung des Autoloaders
  • /integrations/symfony/install/ — Anforderungen und Registrierung.
  • /integrations/symfony/boot-and-discovery/ — Erkennung, Boot, Compiler-Pass.
  • /integrations/symfony/configuration/ — vollständiges Schema und Service-Tabelle.
  • /integrations/symfony/quickstart/ — lauffähiger Controller und asynchrones Beispiel.
  • /integrations/symfony/production-usage/ — Worker-Sicherheit und Streaming.