Lewati ke konten

Boot dan discovery NextPDF Symfony

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.

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, yang telah diverifikasi terhadap kode sumber bundle:

  1. Kernel mendaftarkan bundle. Kernel::registerBundles() membaca config/bundles.php dan membuat instance NextPDF\Symfony\NextPdfBundle, yang memperluas Symfony\Component\HttpKernel\Bundle\Bundle.
  2. Build bundle. NextPdfBundle::build() memanggil metode induk lalu mendaftarkan satu compiler pass: OptionalExtensionPass. NextPdfBundle::getPath() mengembalikan root paket.
  3. Pemuatan ekstensi. Ekstensi DI NextPDF\Symfony\DependencyInjection\NextPdfExtension (alias nextpdf) menjalankan processConfiguration() terhadap Configuration. Ekstensi menyimpan nilai hasil resolusi sebagai parameter container nextpdf.*, lalu memuat config/services.php melalui PhpFileLoader.
  4. Guard ekstensi wajib. NextPdfExtension::load() diakhiri dengan memastikan bahwa ext-mbstring dan ext-zlib tersedia, lalu berhenti secara fail fast jika tidak.
  5. Compiler pass berjalan. Selama kompilasi container, OptionalExtensionPass::process() mengonfigurasi flag ketersediaan ekstensi pada PdfFactory, mendaftarkan signer dan klien time-stamping authority (TSA) secara kondisional, serta menjadwalkan warmup dan penguncian registry fon.
  6. Container dikompilasi dan di-cache. Symfony menulis container yang telah dikompilasi. cache:warmup menjalankan langkah ini sebelum traffic mencapai aplikasi.

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(...) dan setProAvailable(...) ke definisi PdfFactory. Nilai-nilai tersebut berasal dari pemeriksaan class_exists saat 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.signature ada, enabled bernilai true, dan sertifikat telah ditetapkan.
  • Klien TSA — mendaftarkan layanan klien TSA ketika nextpdf.tsa berisi Uniform Resource Locator (URL).
  • Warmup fon — menambahkan pemanggilan metode warmup() dan lock() ke definisi registry fon ketika nextpdf.preload_fonts tidak kosong.

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/.

  1. Nilai default dari Configuration (getConfigTreeBuilder()).
  2. Override aplikasi di config/packages/nextpdf.yaml, beserta override environment di bawah config/packages/<env>/.
  3. Symfony menyelesaikan placeholder parameter %kernel.*%. Sebagai contoh, fonts_path bernilai default %kernel.project_dir%/resources/fonts.
  4. NextPdfExtension::load() menulis hasil gabungan ke parameter container nextpdf.*, yang dikonsumsi oleh services.php dan compiler pass.

Konfigurasi dengan nilai yang tidak valid akan gagal pada langkah 1–2 dengan InvalidConfigurationException dari Symfony.

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

Perintah pertama menampilkan daftar layanan yang terdaftar. Perintah kedua mencetak konfigurasi gabungan. Perintah ketiga membangun ulang container dan menjalankan kembali pemeriksaan ekstensi saat kompilasi.

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.

SpesifikasiKlausulreference_idKlaim
PSR-11psr_11_container#1.1.2.p3.bResolusi container dapat berbeda di setiap pemanggilan
PSR-4psr_4_autoload#x1.x2.p5Pemetaan prefiks namespace ke direktori dasar
  • /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.