Kesalahan runtime dan pendukung
Cakupan
Bagian berjudul “Cakupan”Entri-entri ini mendokumentasikan eksepsi yang dimunculkan oleh lapisan pendukung runtime: kebijakan degradasi, transport HTTP yang didukung-cURL, circuit breaker ketahanan, emitter Security Information and Event Management (SIEM), render manifest, inspeksi PDF, dan subsistem chaos-engineering.
Setiap eksepsi NextPDF memperluas NextPdfException, yang mengimplementasikan
ContextAwareExceptionInterface dan memaparkan getContext(): array untuk
pencatatan diagnostik terstruktur. Sebuah subkelas mengisi array tersebut hanya ketika ia
menimpa getContext(); basis mengembalikan array kosong. Tiga eksepsi pada
halaman ini (DegradedException, CircuitBreakerOpenException, dan InspectException) memperluas
RuntimeException PHP secara langsung dan memaparkan datanya melalui properti readonly
publik alih-alih getContext(). Setiap entri di bawah menyebutkan properti atau
kunci konteks persis yang dibawa kelas tersebut, diambil dari sumber.
Kebijakan degradasi
Bagian berjudul “Kebijakan degradasi”DegradedException
Bagian berjudul “DegradedException”- Dilemparkan ketika. Pipeline rendering menjumpai kapabilitas terdegradasi
yang melanggar kebijakan degradasi aktif. Di bawah
DegradationPolicy::Strict, setiap degradasi berdampak-tinggi (ComplianceRisk,SemanticLoss, atauBlocking) memunculkannya; di bawahDegradationPolicy::Balanced, hanya dampakBlockingyang memunculkannya. - Kelas. Memperluas
RuntimeExceptionsecara langsung (bukanNextPdfException), sehingga ia tidak membawagetContext(). - Data yang dibawa. Dua properti
readonlypublik:$capability(objek nilaiCapabilityyang memicu penolakan, termasukid,status,reason,fallbackTarget, danimpact-nya) dan$policy(kebijakanDegradationPolicyyang aktif pada saat penolakan). Pesan tersebut berbentukFeature "<id>" is <status>: <reason> (policy: <policy>). - Pemulihan. Periksa
$capabilityuntuk mengidentifikasi fitur yang hilang dan penyebabnya. Baik pasang komponen yang dibutuhkan kapabilitas tersebut, terima konfigurasi berdampak-lebih-rendah, atau longgarkan kebijakan dariStrictkeBalancedketika degradasi dapat diterima untuk kasus penggunaan tersebut. Panggil$capability->isAvailable()/isDegraded()untuk mengendalikan pesan yang menghadap-pengguna.
Transport HTTP
Bagian berjudul “Transport HTTP”Ketiga eksepsi ini berasal dari klien PSR-18 yang didukung-cURL dan dekorator
sadar-keamanannya. Dua yang pertama memperluas NextPdfException tetapi tidak
menimpa getContext(), sehingga getContext()-nya mengembalikan array kosong;
data diagnostik dijangkau melalui aksesor getRequest() PSR-18 dan
throwable sebelumnya yang terangkai.
CurlNetworkException
Bagian berjudul “CurlNetworkException”- Dilemparkan ketika. Permintaan HTTP tidak dapat diselesaikan karena sebuah fault tingkat-jaringan: kegagalan resolusi Domain Name System (DNS), timeout koneksi, atau kesalahan handshake Transport Layer Security (TLS). Ini juga merupakan kelas yang dimunculkan dekorator sadar-keamanan untuk penolakan keamanan (penolakan Server-Side Request Forgery, penolakan DNS-rebinding, atau redirect yang ditolak).
- Kelas. Mengimplementasikan PSR-18
Psr\Http\Client\NetworkExceptionInterface. - Data yang dibawa.
getRequest()mengembalikanRequestInterfaceyang gagal. Kesalahan transport yang berasal, saat hadir, adalah throwable sebelumnya yang terangkai.getContext()mengembalikan array kosong (bawaan basis). - Pemulihan. Sebuah fault jaringan mungkin transien — coba ulang dengan backoff jika permintaan idempoten. Penolakan keamanan tidak transien dan harus gagal- tertutup: jangan coba ulang; perbaiki URL target atau kebijakan SSRF sebagai gantinya. Baca pesan dan throwable sebelumnya untuk membedakan keduanya.
CurlRequestException
Bagian berjudul “CurlRequestException”- Dilemparkan ketika. Permintaan itu sendiri tidak dapat dikirim karena cacat, misalnya URL tidak valid atau permintaan yang gagal validasi SSRF sebelum panggilan jaringan apa pun.
- Kelas. Mengimplementasikan PSR-18
Psr\Http\Client\RequestExceptionInterface. - Data yang dibawa.
getRequest()mengembalikanRequestInterfaceyang bermasalah; penyebab yang mendasarinya, saat hadir, adalah throwable sebelumnya yang terangkai.getContext()mengembalikan array kosong. - Pemulihan. Ini adalah cacat masukan-pemanggil atau kebijakan, bukan fault transien. Jangan coba ulang tanpa perubahan. Perbaiki URL, header, atau body permintaan, atau sesuaikan allowlist SSRF jika target memang diizinkan secara sah, lalu ajukan ulang permintaan tersebut.
TransientHttpException
Bagian berjudul “TransientHttpException”- Dilemparkan ketika. Secara internal, di dalam
SecurityAwareHttpClient, untuk menandai sebuah fault transport-dalam yang benar-benar transien (DNS, koneksi, atau timeout yang dimunculkan klien PSR-18 dalam) sebagai memenuhi syarat untuk anggaran retry terbatas. Ini adalah satu-satunya kelas yang memenuhi-syarat-retry yang dikenali loop retry dekorator; eksepsi yang tidak terbungkus (penolakan keamanan yang dimunculkan dekorator) diperlakukan sebagai fatal. - Kelas. Mengimplementasikan PSR-18
Psr\Http\Client\NetworkExceptionInterface. Ditandai@internal— eksepsi ini dibuat dan dibuka sepenuhnya di dalamSecurityAwareHttpClientdan tidak pernah lolos dari dekorator. - Data yang dibawa.
getRequest()mengembalikan permintaan yang gagal. EksepsiClientExceptionInterfacetransport-dalam yang asli dipertahankan sebagai throwable sebelumnya yang terangkai (getPrevious()) dan dimunculkan-ulang apa adanya ke pemanggil setelah anggaran retry habis, sehingga kontrak PSR-18 publik tidak berubah.getContext()mengembalikan array kosong. - Pemulihan. Kode aplikasi tidak menangkap tipe ini secara langsung. Tangkap eksepsi dalam yang dimunculkan-ulang yang dikembalikan dekorator setelah anggaran retry habis, dan perlakukan kegagalan transien berulang sebagai masalah ketersediaan di hulu.
Ketahanan
Bagian berjudul “Ketahanan”CircuitBreakerOpenException
Bagian berjudul “CircuitBreakerOpenException”- Dilemparkan ketika. Sebuah
CircuitBreakerdalam statusCircuitBreakerState::Openmenolak panggilan secara fail-fast, sebelum pemanggilan di hilir apa pun. Eksepsi ini ada untuk memungkinkan pemanggil membedakan “layanan jarak jauh tidak terjangkau saat ini” (sebuah fault transport transien, layak didegradasi) dari “kumpulan koneksi akan habis oleh panggilan ini” (fail-fast, tidak ada jaringan yang dicoba) — mitigasi denial-of-service batch yang diwajibkan untuk klien Public Key Infrastructure (PKI). - Kelas. Memperluas
RuntimeExceptionsecara langsung, sehingga ia tidak membawagetContext(). - Data yang dibawa. Dua properti
readonlypublik:$breakerName(pengenal breaker terbuka) dan$secondsUntilHalfOpen(perkiraan cooldown yang tersisa sebelum breaker beralih ke half-open). Pesan tersebut berbentukCircuit breaker "<name>" is OPEN (cooldown ~<n>s remaining); call rejected fail-fast. - Pemulihan. Jangan menggempur breaker — tunggu setidaknya
$secondsUntilHalfOpensebelum mencoba ulang, atau degradasikan operasinya. Tidak ada panggilan jaringan yang dicoba, sehingga ini bukan bukti bahwa layanan jarak jauh itu sendiri gagal; ini adalah back-pressure yang melindungi kumpulan koneksi.
Observabilitas
Bagian berjudul “Observabilitas”SiemEmitterException
Bagian berjudul “SiemEmitterException”- Dilemparkan ketika. Sebuah emitter event SIEM tidak dapat memersistensikan atau merangkai sebuah rekaman. Ia
memunculkan kegagalan tingkat-sistem-berkas (
open,lock,seek,write,fflush,read) dan fault integritas hash-chain (chain: indeks tak-urut, rekaman tail cacat, atau drift round-trip JSON) yang dibagikan di seluruh log event hash-chain dan adaptor emitter berkas JSON-lines. - Kelas. Memperluas
NextPdfExceptiondan menimpagetContext(). - Kunci konteks.
operation(salah satu dariopen,lock,seek,write,fflush,read,chain),path(jalur log target), dandetail(sebuah detail yang dapat dibaca manusia seperti jumlah byte atau indeks yang-diharapkan-versus-aktual). Ini juga dapat dijangkau melaluigetOperation(),getPath(), dangetDetail(). Pesan tersebut berbentukSIEM emitter <operation> failed for <path>: <detail>. - Pemulihan. Ini dapat ditindaklanjuti oleh infrastruktur atau SecOps, bukan oleh
logika aplikasi. Verifikasi mount log-volume, izin direktori,
deskriptor berkas yang tersedia, dan kesehatan sistem berkas. Sebuah kegagalan operasi
chainmenunjukkan sinyal pengrusakan atau korupsi dalam log audit dan seharusnya diselidiki, bukan dicoba ulang secara senyap.
Render manifest
Bagian berjudul “Render manifest”RenderManifestException
Bagian berjudul “RenderManifestException”- Dilemparkan ketika. Sebuah
RenderManifesttidak dapat dikonstruksi, dideserialisasi, atau dibaca karena kesalahan struktural, tipe, atau kompatibilitas-skema. Manifest adalah kontrak publik berversi yang diajukan oleh setiap transport (CLI, antrean Laravel, Symfony, API SaaS), sehingga manifest yang cacat atau tidak kompatibel dimunculkan secara langsung alih-alih dipaksa ke bawaan. - Kelas. Memperluas
NextPdfExceptiondan menimpagetContext(). Konstruktor yang dinamai menetapkan kode yang dapat-dibaca-mesin dan stabil dalam namespaceSPEC-MANIFEST-*:RenderManifestException::shape()→SPEC-MANIFEST-001— kesalahan bentuk atau tipe selamaRenderManifest::fromArray().RenderManifestException::incompatibleVersion()→SPEC-MANIFEST-002— versi skema mayor yang tidak kompatibel (tidak dapat dibaca).RenderManifestException::missingField()→SPEC-MANIFEST-003— bidang wajib hilang selama finalisasi builder.RenderManifestException::unsupported()→SPEC-MANIFEST-004— sebuah manifest yang terbentuk dengan baik mereferensikan masukan atau template yang tidak dapat diresolusi renderer saat ini (misalnya masukan URI atau mesin template host-only).
- Kunci konteks.
manifest_code(pengenalSPEC-MANIFEST-*) danreason(deskripsi kegagalan yang dapat dibaca manusia). Ini juga dapat dijangkau melaluigetManifestCode()dangetReason(). Pesan tersebut berbentuk[<code>] <reason>. - Pemulihan. Bercabanglah pada
manifest_code. UntukSPEC-MANIFEST-001danSPEC-MANIFEST-003, perbaiki payload manifest (perbaiki tipe bidang atau suplai bidang yang hilang). UntukSPEC-MANIFEST-002, hasilkan ulang manifest terhadap versi skema mayor yang didukung atau mutakhirkan renderer. UntukSPEC-MANIFEST-004, suplai masukan atau mesin template yang dapat diresolusi edisi saat ini.
Inspeksi
Bagian berjudul “Inspeksi”InspectException
Bagian berjudul “InspectException”- Dilemparkan ketika. Inspeksi PDF gagal.
- Kelas. Memperluas
RuntimeExceptionsecara langsung (bukanNextPdfException), sehingga ia tidak membawagetContext(). - Data yang dibawa. Dua properti
readonlypublik:$inspectCode(sebuah kode yang dapat-dibaca-mesin dalam namespaceINSPECT-*) dan$retryable(sebuah boolean yang menunjukkan apakah pemanggil sebaiknya mencoba ulang — misalnya ketika sebuah sidecar inspeksi sementara mati). Penyebab yang berasal, saat hadir, adalah throwable sebelumnya yang terangkai. - Pemulihan. Bercabanglah pada
$inspectCodeuntuk kelas kegagalan tertentu. Ketika$retryableadalahtrue, coba ulang dengan backoff karena kegagalan diperkirakan transien (seperti restart sidecar); ketikafalse, perlakukan masukan atau konfigurasi sebagai cacat dan jangan coba ulang tanpa perubahan.
Chaos engineering
Bagian berjudul “Chaos engineering”ChaosReportWriteException
Bagian berjudul “ChaosReportWriteException”- Dilemparkan ketika.
ChaosScenarioRunner::writeReport()tidak dapat memersistensikan laporan chaos-day teragregasi ke disk. Ini adalah pengganti bertipe-domain untuk kesalahan runtime generik, sehingga pemanggil dapat menangkap kegagalan report-disk yang spesifik tanpa mengaburkannya dengan kesalahan yang dimunculkan di dalam simulator skenario itu sendiri (runner menangkap yang itu sebagai bidangChaosOutcome). - Kelas. Memperluas
NextPdfExceptiondan menimpagetContext(). - Kunci konteks.
output_path(jalur absolut yang dicoba ditulis runner). Ia juga dapat dijangkau melaluigetOutputPath(). Pesan tersebut berbentukChaosScenarioRunner: failed to write report to "<path>". - Pemulihan. Ini adalah kegagalan sisi-tulis dari sink laporan, bukan dari skenario. Verifikasi direktori keluaran ada dan dapat ditulis serta bahwa ruang disk tersedia, lalu jalankan ulang penulisan laporan. Hasil chaos itu sendiri tidak terpengaruh.
RetrievalUnavailableException
Bagian berjudul “RetrievalUnavailableException”- Dilemparkan ketika. Sebuah endpoint retrieval (misalnya layanan Voyage Retrieval Augmented Generation) tidak tersedia dan sistem baik jatuh kembali ke mode cached-only atau gagal-tertutup.
- Kelas. Memperluas
NextPdfExceptiondan menimpagetContext(). - Kunci konteks.
mode(mode operasi setelah kegagalan —CACHED_ONLYketika hasil disajikan hanya dari cache semantik, atauFAIL_CLOSEDketika permintaan ditolak sepenuhnya tanpa data basi) danendpoint(endpoint yang menjadi tak terjangkau). Ini juga dapat dijangkau melaluigetMode()dangetEndpoint(). Pesan tersebut berbentukRetrieval endpoint "<endpoint>" is unavailable; operating in <mode> mode. - Pemulihan. Baca
modeuntuk mengetahui bagaimana sistem terdegradasi. Di bawahCACHED_ONLY, hasil mungkin basi; segarkan setelah endpoint pulih. Di bawahFAIL_CLOSED, permintaan ditolak by design dan harus dicoba ulang setelah endpoint terjangkau. Pulihkan konektivitas endpoint (jaringan, kredensial, kesehatan layanan) sebelum bergantung pada retrieval segar.