NextPDF Artisan başlatma ve keşif
Bir bakışta
“Bir bakışta” başlıklı bölümArtisan, 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.
Keşfetme nasıl çalışır
“Keşfetme nasıl çalışır” başlıklı bölümPaketin 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.
Başlatma sırası
“Başlatma sırası” başlıklı bölümArtisan’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.
Kapsayıcı bağlamaları
“Kapsayıcı bağlamaları” başlıklı bölümArtisan’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/.
Kapsayıcısız hizmet çözümleme
“Kapsayıcısız hizmet çözümleme” başlıklı bölümPremium 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öntem | Döndürdüğü değer | Ne 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.
Yapılandırma çözümleme sırası
“Yapılandırma çözümleme sırası” başlıklı bölümArt arda devreye giren bir yapılandırma dosyası zinciri yoktur. Yapılandırma, tam olarak ChromeRendererConfig nesnesine geçirdiğiniz değerdir:
- Açıkça geçirdiğiniz kurucu bağımsız değişkenleri veya
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_binaryyalnı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/.
Tanılama
“Tanılama” başlıklı bölüm- “Köprü keşfedilebilir mi?” —
class_exists(\NextPDF\Artisan\PageImporter::class)ifadesitrueise, 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 denetimi —
EInvoiceServiceFactory::makeEmbedder() === nullifadesi, Pro katmanının yüklü olmadığı anlamına gelir; açık kaynaklı işleme yolu bundan etkilenmez.
Ayrıca bkz.
“Ayrıca bkz.” başlıklı bölüm- /integrations/artisan/integration/
- /integrations/artisan/overview/
- /integrations/artisan/configuration/
- /integrations/artisan/production-usage/
- /integrations/artisan/troubleshooting/