Uzantı yazımı: genel SPI'ye bakış
Bir bakışta
“Bir bakışta” başlıklı bölümNextPDF, NextPDF\Contracts ve NextPDF\Event ad alanlarında küçük ve bilinçli olarak seçilmiş bir genel sözleşme kümesi sunar. Yazı tipi eklemek, metni yakalamak, belge yaşam döngüsünü gözlemlemek veya motoru çatallamadan kendi imzalama arka ucunuzu sağlamak için bu sözleşmeleri uygulayın.
Kurulum
“Kurulum” başlıklı bölümcomposer require nextpdf/core:^3Kavramsal genel bakış
“Kavramsal genel bakış” başlıklı bölümNextPDF, genel hizmet sağlayıcı arabirimini (SPI) dahili kodundan ayırır. SPI, uygulayabileceğiniz veya gözlemleyebileceğiniz türlerin kümesidir. Bunun dışındaki her şey özeldir ve önceden haber verilmeden değişebilir.
Genel SPI üç biçimde karşınıza çıkar:
- Kayıt defteri sözleşmeleri. Bunlar, belge oluşturmadan önce doldurduğunuz ve işlem ömrü boyunca yaşayan hizmetlerdir;
FontRegistryInterfaceveImageRegistryInterfacearabirimleri başlıca örneklerdir. Varlıkları siz kaydedersiniz; motor bunları okur. - Strateji sözleşmeleri. Bunlar, motorun işleme sırasında çağırdığı tek görevli kancalardır.
TextPreprocessorInterfaceyerleşim zamanındaki metin yakalamayı yönetir,HtmlSecurityPolicyInterfaceise Hypertext Markup Language (HTML) özelliklerini denetler. Davranışı siz sağlarsınız; motor onu çağırır. - İmzalama sözleşmeleri. Bunlar kriptografik arka uçlardır.
SignerInterface,HsmSignerInterfaceveDeferredSignerInterface, anahtar koruyuculuğunu ve imza üretimini sağlamanıza olanak tanır. Motor, Cryptographic Message Syntax (CMS) yapısını oluşturur; anahtarı sizin kodunuz tutar.
Gözlem, NextPDF\Event içinde yer alan ve PHP Standard Recommendation 14 (PSR-14) ile uyumlu ayrı bir olay sistemiyle yönetilir. Yaşam döngüsü olayları; belge oluşturma, yeni sayfalar, yazı tipi yükleme, imzalama ve yazma işlemlerine tepki vermenize olanak tanır. Bunlar motorun davranışını değiştirmez.
Her sözleşmenin kaynak PHPDoc’unda bir @stability etiketi bulunur: stable, experimental veya deprecated. Etiket ile sözleşmeye özgü geriye dönük uyumluluk taahhüdü, ne kadar değişiklik beklemeniz gerektiğini belirtir. İlkenin tamamı için SPI kararlılık kuralları sayfasına bakın.
Neler genişletilebilir
“Neler genişletilebilir” başlıklı bölüm| Yetenek | Genel sözleşme | Kararlılık |
|---|---|---|
| Yazı tipi kaydı ve arama | NextPDF\Contracts\FontRegistryInterface | stable (1.7.0 sürümünden beri) |
| Görüntü önbelleğe alma ve kod çözme | NextPDF\Contracts\ImageRegistryInterface | stable (2.0.0 sürümünden beri) |
| Yerleşim zamanında metin yakalama | NextPDF\Contracts\TextPreprocessorInterface | stable (1.9.0 sürümünden beri) |
| HTML özellik denetimi | NextPDF\Contracts\HtmlSecurityPolicyInterface | stable (3.1.0 sürümünden beri) |
| Belge fabrikası bağlantısı | NextPDF\Contracts\DocumentFactoryInterface | stable (1.7.0 sürümünden beri) |
| Eşzamanlı imzalama | NextPDF\Contracts\SignerInterface | stable (1.0.0 sürümünden beri) |
| Donanım destekli imzalama | NextPDF\Contracts\HsmSignerInterface | stable (1.0.0 sürümünden beri) |
| Ertelenmiş ve toplu imzalama | NextPDF\Contracts\DeferredSignerInterface | experimental (3.0.0 sürümünden beri) |
| RFC 3161 zaman damgalama | NextPDF\Contracts\TimestampProviderInterface | experimental (3.0.0 sürümünden beri) |
| Yaşam döngüsü gözlemi | NextPDF\Event\* (PSR-14 uyumlu) | stable gönderici; experimental yükler |
Neler genel değildir
“Neler genel değildir” başlıklı bölümAşağıdaki türler dahili kabul edilir. Bunları içe aktarmayın, alt sınıflarını oluşturmayın veya bunlara bağımlı olmayın:
- Şu
NextPDF\ContractsveNextPDF\Eventad alanlarının dışında kalan ve PHPDoc’unda bir@stabilityetiketi taşımayan herhangi bir sınıf. - HTML ayrıştırıcısı, yazıcı, yerleşim hattı ve yazı tipi alt küme oluşturucusu dahil olmak üzere somut motor kodu.
- NextPDF Pro ve NextPDF Enterprise paketleri. Bunların dahili sınıfları açık kaynak yüzeyinin parçası değildir. Ücretli bir sürüm bir SPI uygulaması sunduğunda, o sürümün dahili türünü değil genel sözleşmeyi kullanın.
API yüzeyi
“API yüzeyi” başlıklı bölümÜretilen sözleşmeler haritası yetkili kaynaktır ve her sürüm için kaynaktan yeniden oluşturulur. Her arabirim dosyasındaki @stability PHPDoc etiketini tek doğru kaynak olarak ele alın. Yukarıdaki tabloyu yalnızca okuma kılavuzu olarak kullanın.
Kod örneği — hızlı başlangıç
“Kod örneği — hızlı başlangıç” başlıklı bölümBir yazı tipi kaydedin, ardından yüklenmesini izleyin. Her iki adımda da yalnızca genel türler kullanılır.
<?php
declare(strict_types=1);
use NextPDF\Contracts\FontRegistryInterface;use NextPDF\Event\Content\FontLoadedEvent;use NextPDF\Event\EventDispatcher;use NextPDF\Event\ListenerProvider;
/** @var FontRegistryInterface $fonts */$fonts->register('/srv/fonts/Inter-Regular.ttf', 'Inter');
$listeners = new ListenerProvider();$listeners->addListener( FontLoadedEvent::class, static function (FontLoadedEvent $event): void { \error_log("Font loaded: {$event->family} {$event->style}"); },);
$dispatcher = new EventDispatcher($listeners);Kod örneği — üretim
“Kod örneği — üretim” başlıklı bölümUzun süre çalışan bir işçide, kayıt defterlerini önyükleme sırasında bir kez oluşturup kilitleyin ve belge fabrikası aracılığıyla paylaşılan bir gönderici enjekte edin.
<?php
declare(strict_types=1);
use NextPDF\Contracts\DocumentFactoryInterface;use NextPDF\Contracts\FontRegistryInterface;use NextPDF\Event\EventDispatcher;use NextPDF\Event\ListenerProvider;use Psr\Log\LoggerInterface;
final class DocumentBootstrap{ public function __construct( private readonly FontRegistryInterface $fonts, private readonly DocumentFactoryInterface $factory, private readonly LoggerInterface $logger, ) {}
public function warmup(): EventDispatcher { $this->fonts->warmup([ '/srv/fonts/Inter-Regular.ttf', '/srv/fonts/Inter-Bold.ttf', ]); $this->fonts->lock();
$listeners = new ListenerProvider(); $listeners->addListener( \NextPDF\Event\Security\SignatureAppliedEvent::class, fn (object $event): mixed => $this->logger->info('Signature applied'), );
return new EventDispatcher($listeners); }}Sınır durumları ve dikkat edilecek noktalar
“Sınır durumları ve dikkat edilecek noktalar” başlıklı bölüm- Kayıt defteri kilidi.
FontRegistryInterface::lock()çağrıldıktan sonra değiştirme yöntemleriLogicExceptionoluşturur. Yalnızca ön ısıtma tamamlandıktan sonra kilitleyin. - Kararlılık uyuşmazlığı. Bir
experimentalsözleşme, bir küçük sürümde değişebilir. Üretimde bu sözleşmeye bağımlı olmadan önce belirtilen kararlılığı denetleyin. - Ad alanı disiplini.
NextPDF\ContractsveyaNextPDF\Eventdışındaki ve@stabilityetiketi olmayan bir tür, teknik olarakpublicolsa bile dahilidir.
Performans
“Performans” başlıklı bölümSPI, kullanılmadığında sıfır maliyetlidir. Bir olay sınıfı için hiçbir dinleyici bağlanmamışsa, olay göndericisi tek bir hasListeners() denetiminden hemen sonra geri döner. Kayıt defterleri yalın PHP verileri tutar ve ilk istekte oluşacak gecikmeyi dağıtmak için önyükleme sırasında ön ısıtmayı destekler.
Güvenlik notları
“Güvenlik notları” başlıklı bölümİmzalama sözleşmeleri, güvenlik açısından hassas bir yüzeydir. HsmSignerInterface, özel anahtarın donanım sınırından asla çıkmamasını gerektirir. Uygulamanız bu gereksinimi karşılamalıdır. Üçüncü taraf imzalama arka ucu sözleşmesi ve tehdit modeli için anahtar yönetim sistemi (KMS) sağlayıcı sözleşmesi sayfasına bakın.
Uygunluk
“Uygunluk” başlıklı bölümBu genel bakış sayfasında hiçbir normatif iddiada bulunulmamıştır. PDF Advanced Electronic Signatures (PAdES) ve anahtar yönetimi dahil olmak üzere her sözleşmeye ilişkin uygunluk, ilgili SPI sayfalarında belgelenmiştir.
Ticari bağlam
“Ticari bağlam” başlıklı bölümNextPDF Pro ve NextPDF Enterprise, anahtar yönetim sistemi destekli imzalama dahil olmak üzere çeşitli imzalama ve doğrulama sözleşmelerinin üretim uygulamalarını sağlar. Siz genel sözleşmeye bağımlı kalırsınız; uygulamayı ilgili sürüm sağlar, böylece kodunuz sürümler arasında taşınabilir kalır.
Ayrıca bkz.
“Ayrıca bkz.” başlıklı bölüm- SPI kararlılık kuralları
- Özel yazı tipleri
- Özel yerleşim ve metin yakalama
- Eylem tetikleyicileri ve olay dinleyicileri
- KMS sağlayıcı sözleşmesi
İlgili sözleşmeler ve modüller
“İlgili sözleşmeler ve modüller” başlıklı bölüm- Contracts modülü başvurusu — üretilen sözleşmeler haritasının tamamı.
- İmzalama sözleşmeleri başvurusu —
SignerInterface,HsmSignerInterfaceveDeferredSignerInterface. - Güvenlik ilkesi sözleşmesi başvurusu —
HtmlSecurityPolicyInterfaceayrıntıları. - Event modülü başvurusu — yaşam döngüsü gözlem yüzeyi.
- SPI kararlılık kuralları — her
@stabilityetiketinin ardındaki değişiklik ilkesi. - KMS sağlayıcı sözleşmesi — imzalama arka ucu sözleşmesi ve tehdit modeli.
Sözlük, SPI, uzantı noktası, kararlılık etiketi ve geriye dönük uyumluluk taahhüdü terimlerini tanımlar; her kanonik tanım için yayımlanmış sözlüğe bakın.