Intégration de NextPDF avec Symfony
Installe nextpdf/symfony, laisse Flex enregistrer le bundle (ou enregistre-le toi-même), ajoute config/packages/nextpdf.yaml, puis injecte PdfFactory. Cette page sert d’index pour l’intégration. Chaque étape renvoie à une page plus détaillée.
Installation
Section intitulée « Installation »composer require nextpdf/symfonyLe bundle requiert nextpdf/core^3.0 || ^5.2, symfony/*^7.2 et
psr/log^3.0. Les classes sont autochargées sous le préfixe PSR-4 NextPDF\Symfony\, mappé sur src/Symfony/. Un autoloader PSR-4 résout le préfixe de namespace en le faisant correspondre à ce répertoire de base (PSR-4 §2). Pour la liste complète des dépendances et des packages optionnels, voir /integrations/symfony/install/.
Démarrage et découverte automatique
Section intitulée « Démarrage et découverte automatique »Avec Symfony Flex, l’entrée extra.symfony.bundles du composer.json du bundle enregistre NextPDF\Symfony\NextPdfBundle pour tous les environnements. Sans Flex, ajoute-le toi-même à config/bundles.php :
return [ NextPDF\Symfony\NextPdfBundle::class => ['all' => true],];Pour la séquence de démarrage complète et le comportement de la passe de compilation, voir /integrations/symfony/boot-and-discovery/.
Liaisons du conteneur
Section intitulée « Liaisons du conteneur »Le fichier config/services.php du bundle enregistre ces services :
| Service / alias | Cycle de vie |
|---|---|
NextPDF\Symfony\Service\PdfFactory | partagé, public — injecte ce service |
nextpdf.document → PdfDocumentInterface → Document | non partagé, public — nouveau à chaque résolution |
NextPDF\Contracts\FontRegistryInterface | partagé, verrouillé après le préchauffage |
NextPDF\Graphics\ImageRegistry | partagé, kernel.reset |
NextPDF\Contracts\DocumentFactoryInterface | partagé |
NextPDF\Symfony\Http\PdfResponse | assistant public sans état |
La liaison du document est non partagée à dessein. PSR-11 autorise un conteneur à renvoyer une valeur différente lors d’appels get() successifs pour un même identifiant. Un nouveau document évite l’état partagé entre les requêtes dans les workers de longue durée (PSR-11 §1.1.2). Pour le tableau complet des services et des alias, y compris les liaisons EInvoice conditionnelles, voir /integrations/symfony/configuration/.
Publier la configuration
Section intitulée « Publier la configuration »L’alias de configuration est nextpdf. Crée config/packages/nextpdf.yaml. Quand une recipe Flex est publiée, elle dépose pour toi une copie par défaut. Chaque clé a une valeur par défaut, donc un fichier minimal ressemble à ceci :
nextpdf: ~L’arbre de configuration complet est documenté dans /integrations/symfony/configuration/.
Première utilisation
Section intitulée « Première utilisation »Injecte PdfFactory, puis renvoie le résultat via PdfResponse :
<?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'); }}Pour un contrôleur de bout en bout et le parcours asynchrone via Messenger, voir /integrations/symfony/quickstart/.
Test de fumée du bundle
Section intitulée « Test de fumée du bundle »Vérifie le câblage sans écrire aucun code applicatif :
php bin/console debug:container nextpdfphp bin/console debug:config nextpdfphp bin/console lint:containerdebug:container nextpdf doit lister PdfFactory, l’alias nextpdf.document et les registres. lint:container vérifie que chaque argument de service peut être résolu. Pour tester la génération, ajoute le contrôleur ci-dessus puis envoie une requête à /hello.pdf.
Points d’entrée de l’API publique
Section intitulée « Points d’entrée de l’API publique »Voici les symboles publics pris en charge pour le code applicatif :
| Symbole | Rôle |
|---|---|
NextPDF\Symfony\Service\PdfFactory::create() | nouveau et préconfiguré : Document |
NextPDF\Symfony\Http\PdfResponse::inline() / download() | réponse mise en mémoire tampon avec en-têtes de sécurité |
NextPDF\Symfony\Http\PdfResponse::streamInline() / streamDownload() | réponse diffusée en flux par fragments |
NextPDF\Symfony\Message\GeneratePdfMessage | DTO de génération asynchrone (validé) |
NextPDF\Symfony\Message\PdfBuilderInterface | contrat de builder résolu par le handler |
Conformité
Section intitulée « Conformité »Chaque ligne est une assertion normative formulée sur cette page. Chaque assertion est rattachée à un reference_id complet de 64 caractères hexadécimaux issu du corpus SDO sous accès contrôlé. La provenance (manifeste du corpus, transport de récupération) se trouve dans _sidecars/rag-citations.yaml.
| Spécification | Clause | reference_id | Assertion |
|---|---|---|---|
| PSR-11 | psr_11_container#1.1.2.p4 | Contrat d’identifiant has()/get() du conteneur | |
| PSR-4 | psr_4_autoload#x1.x2.p5 | Mappage de namespace de l’autoloader |
Voir aussi
Section intitulée « Voir aussi »- /integrations/symfony/install/ — dépendances et enregistrement.
- /integrations/symfony/boot-and-discovery/ — découverte, démarrage, passe de compilation.
- /integrations/symfony/configuration/ — schéma complet et tableau des services.
- /integrations/symfony/quickstart/ — contrôleur exécutable et exemple asynchrone.
- /integrations/symfony/production-usage/ — sécurité des workers et diffusion en flux.