Boot dan discovery NextPDF Symfony
Sekilas
Bagian berjudul “Sekilas”Kernel mendaftarkan NextPdfBundle. Ekstensi Dependency Injection (DI) milik bundle memuat services.php dan menyelesaikan pohon konfigurasi menjadi parameter container. Setelah itu, satu compiler pass menghubungkan ekstensi opsional dan menjalankan warmup fon.
Bagaimana Symfony Flex mengenali bundle
Bagian berjudul “Bagaimana Symfony Flex mengenali bundle”composer.json bundle mendeklarasikan petunjuk registrasi otomatis:
{ "extra": { "symfony": { "bundles": { "NextPDF\\Symfony\\NextPdfBundle": "all" } } }}Pada aplikasi Symfony Flex, petunjuk ini menambahkan NextPDF\Symfony\NextPdfBundle ke config/bundles.php untuk setiap environment (all). Tanpa Flex, tambahkan bundle secara manual di config/bundles.php. Symfony mendokumentasikan model registrasi bundle di (https://symfony.com/doc/current/bundles.html). Kelas-kelas bundle di-autoload menggunakan prefiks PHP Standard Recommendation (PSR)-4 NextPDF\Symfony\, yang dipetakan ke src/Symfony/. Autoloader PSR-4 memetakan prefiks namespace ke direktori dasar tersebut (PSR-4 §2).
Urutan boot
Bagian berjudul “Urutan boot”Urutan boot, yang telah diverifikasi terhadap kode sumber bundle:
- Kernel mendaftarkan bundle.
Kernel::registerBundles()membacaconfig/bundles.phpdan membuat instanceNextPDF\Symfony\NextPdfBundle, yang memperluasSymfony\Component\HttpKernel\Bundle\Bundle. - Build bundle.
NextPdfBundle::build()memanggil metode induk lalu mendaftarkan satu compiler pass:OptionalExtensionPass.NextPdfBundle::getPath()mengembalikan root paket. - Pemuatan ekstensi. Ekstensi DI
NextPDF\Symfony\DependencyInjection\NextPdfExtension(aliasnextpdf) menjalankanprocessConfiguration()terhadapConfiguration. Ekstensi menyimpan nilai hasil resolusi sebagai parameter containernextpdf.*, lalu memuatconfig/services.phpmelaluiPhpFileLoader. - Guard ekstensi wajib.
NextPdfExtension::load()diakhiri dengan memastikan bahwaext-mbstringdanext-zlibtersedia, lalu berhenti secara fail fast jika tidak. - Compiler pass berjalan. Selama kompilasi container,
OptionalExtensionPass::process()mengonfigurasi flag ketersediaan ekstensi padaPdfFactory, mendaftarkan signer dan klien time-stamping authority (TSA) secara kondisional, serta menjadwalkan warmup dan penguncian registry fon. - Container dikompilasi dan di-cache. Symfony menulis container yang telah dikompilasi.
cache:warmupmenjalankan langkah ini sebelum traffic mencapai aplikasi.
Compiler pass
Bagian berjudul “Compiler pass”Bundle mendaftarkan tepat satu pass, NextPDF\Symfony\DependencyInjection\Compiler\OptionalExtensionPass, di dalam NextPdfBundle::build(). Pass ini berjalan dalam grup pass standar (sebelum optimasi) dan melakukan empat langkah. Setiap langkah dilindungi guard, sehingga tidak melakukan apa pun ketika inputnya tidak tersedia:
- Flag ekstensi — menambahkan pemanggilan metode
setArtisanAvailable(...)dansetProAvailable(...)ke definisiPdfFactory. Nilai-nilai tersebut berasal dari pemeriksaanclass_existssaat kompilasi terhadap factory browser Artisan dan kelas Pro PDF/A. - Registrasi signer — mendaftarkan factory info sertifikat dan layanan signer untuk profil baseline B-B ketika
nextpdf.signatureada,enabledbernilai true, dan sertifikat telah ditetapkan. - Klien TSA — mendaftarkan layanan klien TSA ketika
nextpdf.tsaberisi Uniform Resource Locator (URL). - Warmup fon — menambahkan pemanggilan metode
warmup()danlock()ke definisi registry fon ketikanextpdf.preload_fontstidak kosong.
Binding container
Bagian berjudul “Binding container”config/services.php mendefinisikan layanan. Layanan dokumen nextpdf.document (dengan alias NextPDF\Contracts\PdfDocumentInterface dan NextPDF\Core\Document) bersifat non-shared: setiap resolusi mengembalikan dokumen baru. PSR-11 secara eksplisit mengizinkan perilaku ini; pemanggilan get() berurutan untuk satu id dapat mengembalikan nilai yang berbeda (PSR-11 §1.1.2). Registry fon bersifat shared dan dikunci setelah warmup. Registry citra bersifat shared dan diberi tag kernel.reset. Tabel lengkapnya ada di /integrations/symfony/configuration/.
Urutan resolusi konfigurasi
Bagian berjudul “Urutan resolusi konfigurasi”- Nilai default dari
Configuration(getConfigTreeBuilder()). - Override aplikasi di
config/packages/nextpdf.yaml, beserta override environment di bawahconfig/packages/<env>/. - Symfony menyelesaikan placeholder parameter
%kernel.*%. Sebagai contoh,fonts_pathbernilai default%kernel.project_dir%/resources/fonts. NextPdfExtension::load()menulis hasil gabungan ke parameter containernextpdf.*, yang dikonsumsi olehservices.phpdan compiler pass.
Konfigurasi dengan nilai yang tidak valid akan gagal pada langkah 1–2 dengan InvalidConfigurationException dari Symfony.
Diagnostik
Bagian berjudul “Diagnostik”php bin/console debug:container nextpdfphp bin/console debug:config nextpdfphp bin/console cache:clearPerintah pertama menampilkan daftar layanan yang terdaftar. Perintah kedua mencetak konfigurasi gabungan. Perintah ketiga membangun ulang container dan menjalankan kembali pemeriksaan ekstensi saat kompilasi.
Kesesuaian
Bagian berjudul “Kesesuaian”Setiap baris adalah klaim normatif pada halaman ini, yang disematkan ke reference_id 64-heksa penuh dari korpus standards development organization (SDO) yang bersifat gated. Provenans (manifes korpus, transport pengambilan) berada di _sidecars/rag-citations.yaml.
| Spesifikasi | Klausul | reference_id | Klaim |
|---|---|---|---|
| PSR-11 | psr_11_container#1.1.2.p3.b | Resolusi container dapat berbeda di setiap pemanggilan | |
| PSR-4 | psr_4_autoload#x1.x2.p5 | Pemetaan prefiks namespace ke direktori dasar |
Lihat juga
Bagian berjudul “Lihat juga”- /integrations/symfony/integration/ — referensi integrasi menyeluruh.
- /integrations/symfony/install/ — instalasi dan registrasi.
- /integrations/symfony/configuration/ — pohon konfigurasi lengkap dan tabel layanan.
- /integrations/symfony/overview/ — ringkasan kapabilitas.