İçeriğe geç

NextPDF Artisan başlatma ve keşif

Artisan, PHP Standard Recommendation 4 (PSR-4) standardına uyan yalın bir kitaplıktır. Hizmet sağlayıcısı, paketi ya da çerçeve otomatik keşif bildirimi yoktur. Sınıfları otomatik yüklenebilir hale geldiği anda başlatılır. Keşif, Composer’ın PSR-4 eşlemesidir; bundan ibarettir.

Paketin composer.json dosyası iki PSR-4 kökü bildirir: NextPDF\Artisan\src/Artisan/ ve NextPDF\Parser\src/Parser/. Şunları içermez: extra.laravel, bir Symfony paketi sınıfı ya da bir CodeIgniter kaydedicisi. Başlatma sırasında tarama, kayıt veya kanca işlemi yapan bir mekanizma yoktur.

Tümleştirme noktası nextpdf/core içinde bulunur. Document (HasTextOutput concern aracılığıyla), writeHtmlChrome() yöntemini sunar; bu yöntem, çalışma zamanında class_exists() ile NextPDF\Parser\PdfReader ve NextPDF\Artisan\PageImporter sınıflarını denetler. Otomatik yükleyici her iki sınıfı da çözümleyebildiğinde Chrome yolu kullanılabilir hale gelir. Çözümleyemediğinde core, ölümcül bir hatayla başarısız olmak yerine bir yerleşim istisnası oluşturur. Bu nedenle keşif tek bir soru sorar: Artisan sınıfları otomatik yükleyicide mi? Yanıtı Composer verir; hiçbir çerçeve mekanizması devreye girmez.

Bu, bilinçli bir tercihtir. Bu köprü, çerçeve tarafından yönetilen bir hizmet değil, core motorun paket sınırı üzerinden eriştiği bir yetenektir. Artisan’ı Laravel, Symfony, CodeIgniter, bir komut satırı arabirimi (CLI) betiği veya bir kuyruk işçisinde aynı şekilde kullanabilirsiniz; çünkü bu barındırıcıların hiçbirine bağımlı değildir.

no

yes

Composer autoload (PSR-4)

Application constructs Document

Document::setChromeRendererConfig(config)

Document::writeHtmlChrome(html)

class_exists PdfReader

and PageImporter?

core raises layout exception

resolve ChromeHtmlRenderer

render → parse → import Form XObject

Diagram

Artisan’da önyükleme çekirdeği, komut kaydı veya ertelenmiş sağlayıcı aşaması yoktur. İlk writeHtmlChrome() çağrısı, yaşam döngüsünün tek giriş noktasıdır.

Artisan’da bağımlılık ekleme (DI) kapsayıcısı yoktur ve hiçbir bağlama kaydetmez. Bileşenleri, kurucu üzerinden verilen yalın nesnelerdir: bir ChromeRendererConfig oluşturun, bunu ChromeHtmlRenderer nesnesine geçirin ve isteğe bağlı olarak bir PSR-3 günlükleyicisi ile özel bir HtmlSecurityPolicyInterface ekleyin. Bir barındırıcı kapsayıcısında ChromeHtmlRenderer nesnesini tekil olarak kendiniz kaydedin; örnek için bkz. /integrations/artisan/production-usage/.

Premium e-fatura sözleşmeleri dahil olmak üzere bazı NextPDF yetenekleri genellikle bir çerçeve kapsayıcısı aracılığıyla çözümlenir. Artisan, CLI araçları, bağımsız betikler ve özel çalıştırıcılar gibi kapsayıcısız ortamlarda da çalışır; bu nedenle EInvoiceServiceFactory ile gelir:

YöntemDöndürdüğü değerNe zaman null
makeEmbedder()EmbedderInterface (Pro)Pro katmanı yüklü değil
makeValidator()ValidatorInterface (Enterprise)Enterprise katmanı yüklü değil
makeDefaultProfile()ProfileInterface (EN16931, Pro)Pro katmanı yüklü değil
makeSchematronRunner()SchematronRunnerInterface (Enterprise)Enterprise katmanı yüklü değil

Her çağrı yeni bir örnek döndürür. Bu tek kullanımlık davranış önemlidir; çünkü gömme ve doğrulama çağrıları değiştirilebilir bir Genişletilebilir İşaretleme Dili (XML) ayrıştırma bağlamına sahiptir ve durumu paylaşmamalıdır. Bu fabrika, nadir kapsayıcısız durumlar için bir kolaylıktır; bir hizmet bulucu değildir. Tercih edilen örüntü, nesneleri oluşturma sırasında bir araya getirmek ve bunları kurucu bağımsız değişkenleri olarak geçirmektir. Bir katman mevcut olmadığında null döndürmek, çerçeve sarmalayıcı paketlerini yansıtır; böylece aynı çağıran kod Premium ile veya Premium olmadan çalışır. Kaynak: src/Artisan/EInvoiceServiceFactory.php; tümleştirme testi şurada yapılır: tests/Integration/Artisan/EInvoiceServiceFactoryIntegrationTest.php.

Art arda devreye giren bir yapılandırma dosyası zinciri yoktur. Yapılandırma, tam olarak ChromeRendererConfig nesnesine geçirdiğiniz değerdir:

  1. Açıkça geçirdiğiniz kurucu bağımsız değişkenleri veya
  2. ChromeRendererConfig::fromArray(), barındırıcı tarafından sağlanan bir diziden (snake-case anahtarlar; ayarlanmamış anahtarlar kurucu varsayılanlarına geri döner; chrome_binary yalnızca boş olmayan bir dize olduğunda geçerlidir).

Çözümlenen yapılandırma, oluşturucunun yaşam süresi boyunca değiştirilemez. Her anahtar için bkz. /integrations/artisan/configuration/.

  • “Köprü keşfedilebilir mi?”class_exists(\NextPDF\Artisan\PageImporter::class) ifadesi true ise, Composer’ın otomatik yükleyicisi bunu bulabilir ve core, Chrome yolunu kullanır.
  • “Başlatıldı mı?” — başarısız olabilecek ayrı bir başlatma aşaması yoktur; eksik bir bağımlılık, ilk writeHtmlChrome() çağrısında türü belirli bir istisna olarak ortaya çıkar ve şurada eşlenir: /integrations/artisan/troubleshooting/.
  • Kapsayıcısız Premium denetimiEInvoiceServiceFactory::makeEmbedder() === null ifadesi, Pro katmanının yüklü olmadığı anlamına gelir; açık kaynaklı işleme yolu bundan etkilenmez.
  • /integrations/artisan/integration/
  • /integrations/artisan/overview/
  • /integrations/artisan/configuration/
  • /integrations/artisan/production-usage/
  • /integrations/artisan/troubleshooting/