Ga naar inhoud

NextPDF Symfony-bootstrap en -detectie

De kernel registreert NextPdfBundle. De Dependency Injection (DI)-extensie van de bundle laadt services.php en lost de configuratieboom op tot containerparameters. Eén compiler pass bekabelt vervolgens de optionele extensies en de lettertype-warmup.

De composer.json van de bundle declareert een hint voor automatische registratie:

{
"extra": {
"symfony": {
"bundles": {
"NextPDF\\Symfony\\NextPdfBundle": "all"
}
}
}
}

In een Symfony Flex-toepassing voegt deze hint NextPDF\Symfony\NextPdfBundle toe aan config/bundles.php voor elke omgeving (all). Zonder Flex moet de bundle handmatig worden toegevoegd in config/bundles.php. Het model voor bundle-registratie staat in de Symfony-documentatie (https://symfony.com/doc/current/bundles.html). De klassen van de bundle worden automatisch geladen via de PHP Standard Recommendation (PSR)-4-prefix NextPDF\Symfony\, toegewezen aan src/Symfony/. Een PSR-4-autoloader wijst de namespace-prefix toe aan die basismap (PSR-4 §2).

De bootstrap-volgorde, geverifieerd tegen de broncode van de bundle:

  1. Kernel registreert bundles. Kernel::registerBundles() leest config/bundles.php en instantieert NextPDF\Symfony\NextPdfBundle, een uitbreiding van Symfony\Component\HttpKernel\Bundle\Bundle.
  2. Bundle-build. NextPdfBundle::build() roept de bovenliggende methode aan en registreert vervolgens één compiler pass: OptionalExtensionPass. NextPdfBundle::getPath() retourneert de hoofdmap van het package.
  3. Extensie laden. De DI-extensie NextPDF\Symfony\DependencyInjection\NextPdfExtension (alias nextpdf) voert processConfiguration() uit met Configuration. De extensie slaat de opgeloste waarden op als nextpdf.*-containerparameters en laadt daarna config/services.php via een PhpFileLoader.
  4. Bewaking van vereiste extensies. NextPdfExtension::load() sluit af met een controle of ext-mbstring en ext-zlib aanwezig zijn, en faalt onmiddellijk als dat niet zo is.
  5. Compiler pass wordt uitgevoerd. Tijdens de containercompilatie configureert OptionalExtensionPass::process() de beschikbaarheidsvlaggen voor extensies op PdfFactory, registreert de signer- en time-stamping authority (TSA)-client voorwaardelijk en plant de warmup en vergrendeling van de lettertyperegistry in.
  6. Container gecompileerd en in cache opgeslagen. Symfony schrijft de gecompileerde container weg. cache:warmup voert deze stap uit voordat verkeer de toepassing bereikt.

De bundle registreert precies één pass, NextPDF\Symfony\DependencyInjection\Compiler\OptionalExtensionPass, in NextPdfBundle::build(). Deze draait in de standaard pass-groep (vóór de optimalisatie). De pass voert vier stappen uit. Elke stap is afgeschermd, zodat deze niets doet wanneer de invoer ontbreekt:

  • Extensievlaggen — voegt de methode-aanroepen setArtisanAvailable(...) en setProAvailable(...) toe aan de definitie van PdfFactory. De waarden komen uit class_exists-tests tijdens de compilatie voor de Artisan-browserfactory en de Pro PDF/A-klasse.
  • Registratie van de signer — registreert een factory voor certificaatinformatie en een signer-service voor het baseline B-B-profiel wanneer nextpdf.signature aanwezig is, enabled waar is en er een certificaat is geconfigureerd.
  • TSA-client — registreert een TSA-clientservice wanneer nextpdf.tsa een Uniform Resource Locator (URL) bevat.
  • Lettertype-warmup — voegt de methode-aanroepen warmup() en lock() toe aan de definitie van de lettertyperegistry wanneer nextpdf.preload_fonts niet leeg is.

config/services.php definieert de services. De documentservice nextpdf.document (met aliassen NextPDF\Contracts\PdfDocumentInterface en NextPDF\Core\Document) is niet-gedeeld: elke resolutie retourneert een nieuw document. PSR-11 staat dit gedrag uitdrukkelijk toe; opeenvolgende get()-aanroepen voor één id kunnen verschillende waarden retourneren (PSR-11 §1.1.2). De lettertyperegistry is gedeeld en wordt na de warmup vergrendeld. De afbeeldingsregistry is gedeeld en voorzien van de tag kernel.reset. De volledige tabel staat in /integrations/symfony/configuration/.

  1. Ingebouwde standaardwaarden uit Configuration (getConfigTreeBuilder()).
  2. Overrides van de toepassing in config/packages/nextpdf.yaml, plus omgevingsoverrides onder config/packages/<env>/.
  3. Symfony lost de %kernel.*%-parameterplaceholders op. Zo is de standaardwaarde van fonts_path gelijk aan %kernel.project_dir%/resources/fonts.
  4. NextPdfExtension::load() schrijft het samengevoegde resultaat naar nextpdf.*-containerparameters, die services.php en de compiler pass gebruiken.

Ongeldige waarden leiden bij stap 1–2 tot een Symfony-InvalidConfigurationException.

Terminal window
php bin/console debug:container nextpdf
php bin/console debug:config nextpdf
php bin/console cache:clear

Het eerste commando toont de geregistreerde services. Het tweede commando drukt de samengevoegde configuratie af. Het derde bouwt de container opnieuw op en voert de extensietests tijdens de compilatie opnieuw uit.

Elke rij is een normatieve claim op deze pagina, vastgelegd met een volledige 64-hex reference_id uit het afgeschermde corpus van de standards development organization (SDO). De herkomst (corpusmanifest, ophaaltransport) staat in _sidecars/rag-citations.yaml.

SpecClausulereference_idClaim
PSR-11psr_11_container#1.1.2.p3.bContainerresolutie kan per aanroep verschillen
PSR-4psr_4_autoload#x1.x2.p5Toewijzing van namespace-prefix aan basismap
  • /integrations/symfony/integration/ — referentie voor end-to-end-bekabeling.
  • /integrations/symfony/install/ — installatie en registratie.
  • /integrations/symfony/configuration/ — volledige configuratieboom en servicetabel.
  • /integrations/symfony/overview/ — overzicht van de mogelijkheden.