İçeriğe geç

NextPDF Symfony'de önyükleme ve keşif

Çekirdek, NextPdfBundle paketini kaydeder. Paketin bağımlılık enjeksiyonu (DI) uzantısı, services.php dosyasını yükler ve yapılandırma ağacını konteyner parametrelerine çözümler. Ardından bir derleyici geçişi, isteğe bağlı uzantıları ve yazı tipi ön ısıtmasını bağlar.

Paketin composer.json dosyası bir otomatik kayıt ipucu bildirir:

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

Symfony Flex kullanılan bir uygulamada bu ipucu, NextPDF\Symfony\NextPdfBundle sınıfını her ortam için config/bundles.php dosyasına ekler (all). Flex yoksa paketi config/bundles.php dosyasına elle eklemeniz gerekir. Symfony, paket kayıt modelini şu adreste belgeler: (https://symfony.com/doc/current/bundles.html). Paket sınıfları, PHP Standart Önerisi (PSR)-4 öneki NextPDF\Symfony\ altında otomatik yüklenir ve src/Symfony/ dizinine eşlenir. Bir PSR-4 otomatik yükleyici, ad alanı önekini bu temel dizine eşler (PSR-4 §2).

Paket kaynağına göre doğrulanmış önyükleme sırası:

  1. Çekirdek paketleri kaydeder. Kernel::registerBundles(), config/bundles.php dosyasını okur ve NextPDF\Symfony\NextPdfBundle sınıfının örneğini oluşturur; bu sınıf Symfony\Component\HttpKernel\Bundle\Bundle sınıfını genişletir.
  2. Paket derlemesi. NextPdfBundle::build(), üst sınıf yöntemini çağırır ve ardından bir derleyici geçişi kaydeder: OptionalExtensionPass. NextPdfBundle::getPath(), paket kökünü döndürür.
  3. Uzantı yükleme. DI uzantısı NextPDF\Symfony\DependencyInjection\NextPdfExtension (takma ad nextpdf), processConfiguration() yöntemini Configuration sınıfı üzerinden çalıştırır. Çözümlenen değerleri nextpdf.* konteyner parametreleri olarak saklar, ardından config/services.php dosyasını bir PhpFileLoader aracılığıyla yükler.
  4. Gerekli uzantı koruması. NextPdfExtension::load(), ext-mbstring ve ext-zlib uzantılarının varlığını doğrulayarak tamamlanır ve yoklarsa hızlıca başarısız olur.
  5. Derleyici geçişi çalışır. Konteyner derlemesi sırasında OptionalExtensionPass::process(), PdfFactory üzerinde uzantı kullanılabilirliği bayraklarını yapılandırır, imzalayıcıyı ve zaman damgası yetkilisi (TSA) istemcisini koşullu olarak kaydeder ve yazı tipi kayıt defteri ön ısıtmasını ve kilitlemesini planlar.
  6. Konteyner derlenir ve önbelleğe alınır. Symfony, derlenmiş konteyneri yazar. cache:warmup, bu adımı trafik uygulamaya ulaşmadan önce gerçekleştirir.

Paket, tam olarak tek geçiş olan NextPDF\Symfony\DependencyInjection\Compiler\OptionalExtensionPass geçişini NextPdfBundle::build() içinde kaydeder. Varsayılan (eniyileme öncesi) geçiş grubunda çalışır. Geçiş dört adım yürütür. Her adım korumalıdır; girdileri yoksa hiçbir şey yapmaz:

  • Uzantı bayraklarısetArtisanAvailable(...) ve setProAvailable(...) yöntem çağrılarını PdfFactory tanımına ekler. Değerler, Artisan tarayıcı fabrikası ve Pro PDF/A sınıfı için derleme zamanı class_exists yoklamalarından gelir.
  • İmzalayıcı kaydınextpdf.signature mevcut olduğunda, enabled true olduğunda ve bir sertifika ayarlandığında, temel B-B profili için bir sertifika bilgisi fabrikası ve bir imzalayıcı hizmeti kaydeder.
  • TSA istemcisinextpdf.tsa bir URL’ye sahip olduğunda bir TSA istemci hizmeti kaydeder.
  • Yazı tipi ön ısıtmasıwarmup() ve lock() yöntem çağrılarını, nextpdf.preload_fonts boş olmadığında yazı tipi kayıt defteri tanımına ekler.

config/services.php, hizmetleri tanımlar. nextpdf.document belge hizmeti (takma adları NextPDF\Contracts\PdfDocumentInterface ve NextPDF\Core\Document) paylaşımsızdır: her çözümleme yeni bir belge döndürür. Bu davranışa PSR-11 açıkça izin verir; bir kimlik için ardışık get() çağrıları farklı değerler döndürebilir (PSR-11 §1.1.2). Yazı tipi kayıt defteri paylaşılır ve ön ısıtmadan sonra kilitlenir. Görüntü kayıt defteri paylaşılır ve kernel.reset olarak etiketlenir. Tam tablo /integrations/symfony/configuration/ içinde yer alır.

  1. Yerleşik varsayılanlar şuradan gelir: Configuration (getConfigTreeBuilder()).
  2. Uygulama geçersiz kılmaları şu konumdadır: config/packages/nextpdf.yaml; ortam geçersiz kılmaları da şunun altındadır: config/packages/<env>/.
  3. Symfony, %kernel.*% parametre yer tutucularını çözümler. Örneğin fonts_path, varsayılan olarak %kernel.project_dir%/resources/fonts değerini alır.
  4. NextPdfExtension::load(), birleştirilmiş sonucu nextpdf.* konteyner parametrelerine yazar; bu parametreler services.php ve derleyici geçişi tarafından tüketilir.

Geçersiz değerler, 1–2. adımda Symfony InvalidConfigurationException hatasıyla sonuçlanır.

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

İlk komut, kayıtlı hizmetleri listeler. İkinci komut, birleştirilmiş yapılandırmayı yazdırır. Üçüncü komut, konteyneri yeniden oluşturur ve derleme zamanı uzantı yoklamalarını yeniden çalıştırır.

Her satır, bu sayfadaki normatif bir savı temsil eder ve geçit kontrollü standart geliştirme kuruluşu (SDO) külliyatından gelen tam 64 onaltılık karakterli bir reference_id değerine sabitlenmiştir. Kaynak bilgisi (külliyat bildirimi, alma taşıması) _sidecars/rag-citations.yaml içinde yer alır.

SpesifikasyonMaddereference_idSav
PSR-11psr_11_container#1.1.2.p3.bKonteyner çözümlemesi çağrıdan çağrıya farklı olabilir
PSR-4psr_4_autoload#x1.x2.p5Ad alanı önekinden temel dizine eşleme
  • /integrations/symfony/integration/ — uçtan uca bağlama referansı.
  • /integrations/symfony/install/ — kurulum ve kayıt.
  • /integrations/symfony/configuration/ — tam yapılandırma ağacı ve hizmet tablosu.
  • /integrations/symfony/overview/ — yetenek özeti.