NextPDF-Boot und -Discovery in Symfony
Auf einen Blick
Abschnitt betitelt „Auf einen Blick“Der Kernel registriert NextPdfBundle. Die DI-Extension des Bundles lädt services.php und überführt den Konfigurationsbaum in Container-Parameter. Anschließend verdrahtet ein einzelner Compiler-Pass optionale Erweiterungen und den Font-Warmup.
Wie Symfony Flex das Bundle erfasst
Abschnitt betitelt „Wie Symfony Flex das Bundle erfasst“Die composer.json des Bundles deklariert einen Hinweis zur automatischen Registrierung:
{ "extra": { "symfony": { "bundles": { "NextPDF\\Symfony\\NextPdfBundle": "all" } } }}In einer Symfony-Flex-Anwendung fügt dies NextPDF\Symfony\NextPdfBundle für jede Umgebung (all) zu config/bundles.php hinzu. Ohne Flex fügen Sie das Bundle manuell in config/bundles.php ein. Symfony dokumentiert das Modell der Bundle-Registrierung offiziell (https://symfony.com/doc/current/bundles.html). Die Klassen des Bundles werden unter dem PSR-4-Präfix NextPDF\Symfony\ automatisch geladen, das auf src/Symfony/ abgebildet ist. Ein PSR-4-Autoloader bildet das Namespace-Präfix auf dieses Basisverzeichnis ab (PSR-4 §2).
Boot-Sequenz
Abschnitt betitelt „Boot-Sequenz“Die Boot-Sequenz, anhand des Bundle-Quellcodes geprüft:
- Der Kernel registriert die Bundles.
Kernel::registerBundles()liestconfig/bundles.phpund instanziiertNextPDF\Symfony\NextPdfBundle, dasSymfony\Component\HttpKernel\Bundle\Bundleerweitert. - Bundle-Build.
NextPdfBundle::build()ruft die Elternmethode auf und registriert dann einen einzelnen Compiler-Pass:OptionalExtensionPass.NextPdfBundle::getPath()gibt das Paket-Root zurück. - Laden der Extension. Die DI-Extension
NextPDF\Symfony\DependencyInjection\NextPdfExtension(Aliasnextpdf) führtprocessConfiguration()mitConfigurationaus. Sie setzt die aufgelösten Werte alsnextpdf.*-Container-Parameter und lädt anschließendconfig/services.phpüber einenPhpFileLoader. - Schutz für erforderliche Erweiterungen.
NextPdfExtension::load()stellt am Ende sicher, dassext-mbstringundext-zlibvorhanden sind, und bricht andernfalls sofort ab. - Der Compiler-Pass läuft. Während der Container-Kompilierung konfiguriert
OptionalExtensionPass::process()die Verfügbarkeits-Flags der Erweiterungen anPdfFactory, registriert bei Bedarf den Signer und den TSA-Client und plant Warmup und Lock der Font-Registry. - Der Container wird kompiliert und zwischengespeichert. Symfony schreibt den kompilierten Container.
cache:warmupführt diesen Schritt vor dem Traffic aus.
Compiler-Passes
Abschnitt betitelt „Compiler-Passes“Das Bundle registriert genau einen Pass, NextPDF\Symfony\DependencyInjection\Compiler\OptionalExtensionPass, der in NextPdfBundle::build() hinzugefügt wird. Er läuft in der Standard-Pass-Gruppe (vor der Optimierung). Der Pass führt vier Schritte aus. Jeder Schritt ist abgesichert, sodass er bei fehlenden Eingaben zu einem No-op wird:
- Erweiterungs-Flags — fügt die Methodenaufrufe
setArtisanAvailable(...)undsetProAvailable(...)zur Definition vonPdfFactoryhinzu. Die Werte stammen ausclass_exists-Prüfungen zur Compile-Zeit für die Artisan-Browser-Factory und die Pro-PDF/A-Klasse. - Registrierung des Signers — wenn
nextpdf.signaturevorhanden ist,enabledtrue ist und ein Zertifikat gesetzt ist, werden eine Factory für Zertifikatsinformationen und ein Signer-Dienst für das Baseline-Profil B-B registriert. - TSA-Client — wenn
nextpdf.tsaeine URL hat, wird ein TSA-Client-Dienst registriert. - Font-Warmup — wenn
nextpdf.preload_fontsnicht leer ist, werden der Definition der Font-Registry die Methodenaufrufewarmup()undlock()hinzugefügt.
Container-Bindings
Abschnitt betitelt „Container-Bindings“config/services.php definiert die Dienste. Der Dokument-Dienst nextpdf.document (mit Alias auf NextPDF\Contracts\PdfDocumentInterface und NextPDF\Core\Document) ist non-shared: Jede Auflösung gibt ein frisches Dokument zurück, was PSR-11 ausdrücklich erlaubt — aufeinanderfolgende get()-Aufrufe für eine ID dürfen unterschiedliche Werte zurückgeben (PSR-11 §1.1.2). Die Font-Registry ist shared und wird nach dem Warmup gesperrt. Die Image-Registry ist shared und mit kernel.reset getaggt. Die vollständige Tabelle finden Sie unter /integrations/symfony/configuration/.
Auflösungsreihenfolge der Konfiguration
Abschnitt betitelt „Auflösungsreihenfolge der Konfiguration“- Integrierte Standardwerte aus
Configuration(getConfigTreeBuilder()). - Anwendungs-Overrides in
config/packages/nextpdf.yamlund Umgebungs-Overrides unterconfig/packages/<env>/. - Symfony löst die
%kernel.*%-Parameter-Platzhalter auf.fonts_pathist zum Beispiel standardmäßig%kernel.project_dir%/resources/fonts. NextPdfExtension::load()schreibt das zusammengeführte Ergebnis in dienextpdf.*-Container-Parameter, die vonservices.phpund dem Compiler-Pass konsumiert werden.
Ungültige Werte schlagen in Schritt 1–2 mit einer Symfony InvalidConfigurationException fehl.
Diagnostik
Abschnitt betitelt „Diagnostik“php bin/console debug:container nextpdfphp bin/console debug:config nextpdfphp bin/console cache:clearDer erste Befehl listet die registrierten Dienste auf. Der zweite gibt die zusammengeführte Konfiguration aus. Der dritte baut den Container neu auf und führt die Erweiterungsprüfungen zur Compile-Zeit erneut aus.
Konformität
Abschnitt betitelt „Konformität“Jede Zeile ist eine normative Aussage auf dieser Seite, festgelegt durch eine vollständige, 64-stellige hexadezimale reference_id aus dem gated SDO-Korpus. Die Provenance (Korpus-Manifest, Retrieval-Transport) liegt in _sidecars/rag-citations.yaml.
| Spezifikation | Klausel | reference_id | Aussage |
|---|---|---|---|
| PSR-11 | psr_11_container#1.1.2.p3.b | Die Container-Auflösung kann pro Aufruf abweichen | |
| PSR-4 | psr_4_autoload#x1.x2.p5 | Abbildung von Namespace-Präfix auf Basisverzeichnis |
Siehe auch
Abschnitt betitelt „Siehe auch“- /integrations/symfony/integration/ — End-to-End-Referenz für die Verdrahtung.
- /integrations/symfony/install/ — Installation und Registrierung.
- /integrations/symfony/configuration/ — vollständiger Konfigurationsbaum und Diensttabelle.
- /integrations/symfony/overview/ — Überblick über die Funktionen.