Core/Support/Exceptions — Çatı istisna sınıfları
Doğrulanan kod tabanı:
d508f5e1(dalfeat/fw-license-master) · Tarih: 2026-10-05 · Yayın: 0.9.7 = bu commit + sonrası; belge yalnız doğrulama anındaki kodu anlatır
Kaynak klasör:Core/Support/Exceptions/— 8*.php.
Envanter: 8 dosyanın 8'i aşağıda anlatıldı.
1. Ne işe yarar, kim kullanır
Çatının kendi istisna türleridir. Çoğu DiagnosticException'dan türer: (tür, mesaj, ipucu, kod) dörtlüsünü taşır ve hata sayfası/PreflightProvider bu dörtlüyü doğrudan ekrana çevirir. Böylece "hata türü + ne yapmalı" bilgisi istisnanın içindedir.
Kimler fırlatır / yakalar: Kernel::boot() PreflightException'ı yakalayıp PreflightProvider::renderFatal() çağırır (Kernel §3.3); BaseGuard::fail() PreflightException fırlatır; DatabaseGuardHandler ProjectSuspendedException fırlatır; ErrorAnalysisHandler ValidationException'ı işler; Core/Services/Console cron görevleri CronTaskException kullanır. Sınıf adıyla geçen dış dosya sayıları (Core/Bundles/Packages): PreflightException 13, CronTaskException 7, DiagnosticException 7, PageNotFoundException 3, ValidationException 3, ViewNotFoundException 2, ProjectSuspendedException 1, Support\Exceptions\RuntimeException 0.
2. Dosya envanteri
| Dosya | Üst sınıf | Görev | Yapıcı / yöntemler |
|---|---|---|---|
DiagnosticException.php |
\Exception |
Tür+mesaj+ipucu+kod taşıyan taban. | __construct(string $type, string $message, string $hint = '', int $code = 500), getType(), getHint(), getRenderData(): array (type, message, hint, code) |
PreflightException.php |
DiagnosticException |
Açılış ön kontrolü başarısız (kernel kesilir). | __construct(string $message, string $hint = '', string $type = 'RbnShield Pre-Flight', int $code = 500) |
ProjectSuspendedException.php |
DiagnosticException |
Proje askıda/pasif; varsayılan kod 403. | __construct(string $message, string $hint = '', string $type = 'RbnShield Project Status', int $code = 403) |
RuntimeException.php |
DiagnosticException |
Genel çalışma anı hatası, tür RUNTIME_ERROR, kod 500. |
__construct(string $message, string $hint = 'Sistem operasyonu sırasında beklenmedik bir hata oluştu.', int $code = 500) |
ValidationException.php |
DiagnosticException |
Form doğrulama hatası (HTTP 422), hata dizisi ve dönüş adresi. | __construct(string $message, array $errors = [], ?string $redirectUrl = null), getErrors(): array, getRedirectUrl(): string |
ViewNotFoundException.php |
DiagnosticException |
Görünüm dosyası yok (404). | __construct(string $path, int $code = 404, ?\Exception $previous = null), getPath(): string |
PageNotFoundException.php |
\Exception |
Rota/sayfa yok; mesaj Page Not Found: /<uri>, kod 404. |
__construct(string $uri, int $code = 404, ?\Throwable $previous = null), getUri(): string |
CronTaskException.php |
\RuntimeException (PHP'nin) |
Cron görev sonucu: skipped mi failed mi. |
statik fabrikalar: skipped($msg), alreadyPublished($detail), notScheduledTime($detail), candidateNotFound($msg), configuration($msg), missingParameter($paramKey,$projectKey), modelNotFound($modelAlias,$projectKey), invalidTaskClass($className), invalidTaskInheritance($className), taskFileNotFound($taskClass,$taskKey), undefinedTaskKey($taskKey); getCronStatus(): string, isSkipped(): bool |
3. Akış
- Bir bekçi
BaseGuard::fail($msg,$hint,$type,$code)çağırır →PreflightException. Kernel::boot()yakalar →PreflightProvider::renderFatal($e->getType(), $e->getMessage(), $e->getHint(), $e->getCode())→ sayfa basılır,exit.ValidationExceptiondoğrulama katmanından fırlatılır;ErrorAnalysisHandlererrorsveredirect_urlalanlarını yanıta koyar (Core/Services/Exception/Handlers/ErrorAnalysisHandler.php:112).- Cron: görev "atla" gerektiğinde
CronTaskException::skipped()(durumskipped), gerçek hatada diğer fabrikalar (durumfailed) fırlatılır; çağıranisSkipped()ile ikisini ayırır.
4. Yapılandırma
Yok; varsayılan HTTP kodları: PreflightException 500, ProjectSuspendedException 403, ValidationException 422, ViewNotFoundException/PageNotFoundException 404, RuntimeException 500.
5. Tuzaklar ve kurallar
PreflightExceptionson çaredir: yakalanıncaexitedilir; bu istisnayı üretim kodunda "olağan hata" gibi fırlatmayın (açılışı durdurur).- İsim çakışması:
Rbn\Framework\Core\Support\Exceptions\RuntimeExceptionile PHP'nin\RuntimeException'ı farklı sınıflardır. Sınıf adıyla başka dosyadan hiç kullanılmıyor (tarama: 0 dış dosya).CronTaskExceptionise çatının değil PHP'nin\RuntimeException'ından türer,DiagnosticExceptionailesinde değildir. ValidationException::$redirectUrlvarsayılan olarak$_SERVER['HTTP_REFERER']'dir (yoksa/), yani istemci kontrollüdür. Dönüş adresini kullanan tek dış yerErrorAnalysisHandler(yanıt verisineredirect_urlkoyar); adres yönlendirmeye çevrilirken (yönlendirme katmanı) dış alan adı denetimi o katmanda yapılmalıdır — bu istisna sınıfı doğrulama yapmaz.ViewNotFoundExceptionmesajı Türkçe/İngilizce karışıktır ([RBN]:: Görünüm Dosyası Bulunamadı: <yol>, ipucu İngilizce); ekrana yol basıldığı için üretimde ayrıntı gizlemeBootstrap::configureErrorVisibilityve hata sayfasına bağlıdır.CronTaskException::taskFileNotFoundmesajı "Görev pasif konuma alındı" der, ama sınıf yalnız mesaj taşır; görevi pasife almak çağıranın işidir.DiagnosticException::getRenderData()yalnız dört alan döndürür;ValidationException'ınerrorsdizisi bu çıktıda yoktur, ayrıcagetErrors()ile alınır.
6. Örnek (gerçek koddan)
// Core/System/Kernel/Base/BaseGuard.php:41-44
protected static function fail(string $msg, string $hint, string $type = 'RbnShield', int $code = 500): void
{
throw new PreflightException($msg, $hint, $type, $code);
}