Symfony-Integration mit NextPDF
Auf einen Blick
Abschnitt betitelt „Auf einen Blick“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.
Installation
Abschnitt betitelt „Installation“composer require nextpdf/symfonyDas 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/.
Boot und automatische Erkennung
Abschnitt betitelt „Boot und automatische Erkennung“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/.
Container-Bindungen
Abschnitt betitelt „Container-Bindungen“Die Datei config/services.php des Bundles registriert die folgenden Services:
| Service / Alias | Lebenszyklus |
|---|---|
NextPDF\Symfony\Service\PdfFactory | shared, public — für die Injektion verwenden |
nextpdf.document → PdfDocumentInterface → Document | non-shared, public — bei jeder Auflösung neu |
NextPDF\Contracts\FontRegistryInterface | shared, nach dem Warmup gesperrt |
NextPDF\Graphics\ImageRegistry | shared, kernel.reset |
NextPDF\Contracts\DocumentFactoryInterface | shared |
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/.
Konfiguration veröffentlichen
Abschnitt betitelt „Konfiguration veröffentlichen“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.
Erste Verwendung
Abschnitt betitelt „Erste Verwendung“Injizieren Sie PdfFactory und geben Sie das Ergebnis anschließend über PdfResponse zurück:
<?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/.
Smoke-Test des Bundles
Abschnitt betitelt „Smoke-Test des Bundles“Prüfen Sie die Verdrahtung, ohne Anwendungscode zu schreiben:
php bin/console debug:container nextpdfphp bin/console debug:config nextpdfphp bin/console lint:containerdebug: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.
Öffentliche API-Einstiegspunkte
Abschnitt betitelt „Öffentliche API-Einstiegspunkte“Dies sind die unterstützten öffentlichen Symbole für Anwendungscode:
| Symbol | Zweck |
|---|---|
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\GeneratePdfMessage | DTO für die asynchrone Generierung (validiert) |
NextPDF\Symfony\Message\PdfBuilderInterface | Builder-Vertrag, der vom Handler aufgelöst wird |
Konformität
Abschnitt betitelt „Konformität“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.
| Spezifikation | Klausel | reference_id | Aussage |
|---|---|---|---|
| PSR-11 | psr_11_container#1.1.2.p4 | Identifier-Vertrag für Container-has()/get() | |
| PSR-4 | psr_4_autoload#x1.x2.p5 | Namespace-Zuordnung des Autoloaders |
Siehe auch
Abschnitt betitelt „Siehe auch“- /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.