NextPDF Symfony-bootstrap en -detectie
In een oogopslag
Sectie met titel “In een oogopslag”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.
Hoe Symfony Flex de bundle oppikt
Sectie met titel “Hoe Symfony Flex de bundle oppikt”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).
Bootstrap-volgorde
Sectie met titel “Bootstrap-volgorde”De bootstrap-volgorde, geverifieerd tegen de broncode van de bundle:
- Kernel registreert bundles.
Kernel::registerBundles()leestconfig/bundles.phpen instantieertNextPDF\Symfony\NextPdfBundle, een uitbreiding vanSymfony\Component\HttpKernel\Bundle\Bundle. - Bundle-build.
NextPdfBundle::build()roept de bovenliggende methode aan en registreert vervolgens één compiler pass:OptionalExtensionPass.NextPdfBundle::getPath()retourneert de hoofdmap van het package. - Extensie laden. De DI-extensie
NextPDF\Symfony\DependencyInjection\NextPdfExtension(aliasnextpdf) voertprocessConfiguration()uit metConfiguration. De extensie slaat de opgeloste waarden op alsnextpdf.*-containerparameters en laadt daarnaconfig/services.phpvia eenPhpFileLoader. - Bewaking van vereiste extensies.
NextPdfExtension::load()sluit af met een controle ofext-mbstringenext-zlibaanwezig zijn, en faalt onmiddellijk als dat niet zo is. - Compiler pass wordt uitgevoerd. Tijdens de containercompilatie configureert
OptionalExtensionPass::process()de beschikbaarheidsvlaggen voor extensies opPdfFactory, registreert de signer- en time-stamping authority (TSA)-client voorwaardelijk en plant de warmup en vergrendeling van de lettertyperegistry in. - Container gecompileerd en in cache opgeslagen. Symfony schrijft de gecompileerde container weg.
cache:warmupvoert deze stap uit voordat verkeer de toepassing bereikt.
Compiler passes
Sectie met titel “Compiler passes”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(...)ensetProAvailable(...)toe aan de definitie vanPdfFactory. De waarden komen uitclass_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.signatureaanwezig is,enabledwaar is en er een certificaat is geconfigureerd. - TSA-client — registreert een TSA-clientservice wanneer
nextpdf.tsaeen Uniform Resource Locator (URL) bevat. - Lettertype-warmup — voegt de methode-aanroepen
warmup()enlock()toe aan de definitie van de lettertyperegistry wanneernextpdf.preload_fontsniet leeg is.
Containerbindingen
Sectie met titel “Containerbindingen”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/.
Volgorde van configuratie-oplossing
Sectie met titel “Volgorde van configuratie-oplossing”- Ingebouwde standaardwaarden uit
Configuration(getConfigTreeBuilder()). - Overrides van de toepassing in
config/packages/nextpdf.yaml, plus omgevingsoverrides onderconfig/packages/<env>/. - Symfony lost de
%kernel.*%-parameterplaceholders op. Zo is de standaardwaarde vanfonts_pathgelijk aan%kernel.project_dir%/resources/fonts. NextPdfExtension::load()schrijft het samengevoegde resultaat naarnextpdf.*-containerparameters, dieservices.phpen de compiler pass gebruiken.
Ongeldige waarden leiden bij stap 1–2 tot een Symfony-InvalidConfigurationException.
Diagnostiek
Sectie met titel “Diagnostiek”php bin/console debug:container nextpdfphp bin/console debug:config nextpdfphp bin/console cache:clearHet 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.
Conformiteit
Sectie met titel “Conformiteit”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.
| Spec | Clausule | reference_id | Claim |
|---|---|---|---|
| PSR-11 | psr_11_container#1.1.2.p3.b | Containerresolutie kan per aanroep verschillen | |
| PSR-4 | psr_4_autoload#x1.x2.p5 | Toewijzing van namespace-prefix aan basismap |
Zie ook
Sectie met titel “Zie ook”- /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.