Core/Support/Definitions — Çatı tanım sabitleri (ad alanı, klasör, rota, varlık, kimlik)
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/Definitions/— 10*.php(Render/4,Route/2,System/4) +Legal/3 (aşağıda §2.4).
Envanter: 10 dosyanın 10'u aşağıda anlatıldı. Sabit sayılarıReflectionClassile ölçüldü (PHP 8.3, Windows).
1. Ne işe yarar, kim kullanır
Çatının "değişmez tabloları"dır: ad alanı haritası, klasör matrisi, bileşen sonek tablosu, rota planı, varlık (CSS/JS/yazı tipi) paketleri, marka kimliği. İş mantığı yoktur; iki-üç küçük statik yardımcı hariç yalnız const bulunur. DefinitionResolver bu klasörü baştan sona tarar ve her sınıfı kategori adıyla Definition::get('<kategori>', '<ANAHTAR>') çağrısına açar (Discovery §3.3). Kategori, sınıfın getDefinitionCategory() yöntemi ya da $definitionCategory özelliğiyle verilir; yoksa dosya adından türetilir (Map, Definitions, Blueprint sözcükleri atılır).
| Sınıf | Kategori | Kimler okur |
|---|---|---|
NamespaceMap |
namespace |
NamespaceResolver, Autoload, FolderContext, ModuleContext, ModuleDiscoveryDriver |
FolderMatrix |
folder |
FolderContext/Paths, PermissionDoctor |
RouteBlueprint |
route |
Route::loadRoutes(), SessionSandboxStage, TrafficProvider, Dispatcher |
ComponentTypes |
(dosya adı) | ComponentContext, DiscoveryConfigTrait, AppProjectRegistry |
FrameworkIdentity |
identity (ama bkz. §5.2) |
RbnSystemInfo::get() (doğrudan sınıf sabiti) |
Varlık sınıfları (AssetDefinition, AssetBundles, AssetFonts, AssetConvention) |
dosya adından | Render katmanı (AssetBuilder, SeoResolver, AssetController, RedirectManager, SchemaResolver) |
2. Dosya envanteri
2.1 System/
| Dosya | İçerik | Yöntemler |
|---|---|---|
NamespaceMap.php (BaseConfig) |
FRAMEWORK_PREFIX='Rbn\Framework\', PROJECT_PREFIX='Rbn\Project\', COMPONENT_REGISTRY, MAP (26 giriş: Framework, Framework.Core, Base, Database, Support, Helpers, Services, Http, Render, Routes, System, Internal, Suite, RbnSuite, RbnAdmin, RbnAuth, RbnStudio, Packages, App, Project, Project.App, Project.Core, Modules, Project.Modules, Backend, Frontend). |
— |
FolderMatrix.php (BaseConfig) |
FRAMEWORK (5 kök), PROJECT (6 kök), RUNTIME_LAYERS (11), CODE_LAYERS (16); kategori folder. |
getDefinitionCategory(), isRuntimeLayer(string), isCodeLayer(string) |
ComponentTypes.php |
MAP (22: sonek → tür; Handler→handler, Validator→validation …), PLURAL_MAP (22: tekil → çoğul kayıt anahtarı; repository→repositories, metadata→metadata). |
static typeMap(): array, static pluralize(string $type): string (bilinmeyen tür: küçük harf + s) |
FrameworkIdentity.php (BaseConfig) |
26 skaler sabit: ad, sürüm (FRAMEWORK_VERSION='0.9.6'), URL'ler (https://example.tr, https://cdn.example.tr/), geliştirici bilgisi, depo/sorun/güvenlik bağlantıları, FRAMEWORK_CLI_VERSION='2.3.0', SHIELD_*, ADMIN_*, AUTH_*. |
— |
2.2 Route/
| Dosya | İçerik |
|---|---|
RouteBlueprint.php (BaseConfig, kategori route) |
MIDDLEWARE (aliases: auth, guard → AuthMiddleware, machine-api → ApiGuard; groups: user, admin, superadmin, developer), FILES (framework: core, auth, web; project: boş), PANELS (5: user, admin, developer, guest, frontend), AUTH_ROOTS (8: rbn-admin, register, auth, logout, lockscreen, forgot-password, verify-code, reset-password), LOGIN_ALIAS (giris; panel kapalıyken yönlendirilen giriş takma adı, AUTH_ROOTS dışındadır), CORE_MODULES (dashboard, RbnAdmin), DASHBOARD_PREFIX='dashboard', LOGIN_PATH='rbn-admin', SYSTEM_ALLOWED_PATHS (4), HONEYPOT_PATHS (35), HONEYPOT_ROUTE_EXEMPT (5), HONEYPOT_KEYWORDS (12), LEGACY_FONTS_KEYWORDS (3), FALLBACK_FAVICONS (6), FALLBACK_MOBILE_PREFIXES (2), FALLBACK_MOBILE_MANIFESTS (2), FALLBACK_OG_IMAGES (8). Yasal sayfa takma adları RouteBlueprint'te değil, Legal/LegalPages::ALIASES içindedir. |
StrategicRouteMap.php |
STRATEGIC_ACTIONS (7): index GET /, modal GET modal/?([0-9]*), update POST save, delete POST delete/([0-9]+), destroy POST destroy/([0-9]+), status POST toggle, bulkOrder POST reorder — "sıfır kod" rota eşlemesi. |
2.3 Render/
| Dosya | İçerik | Yöntemler |
|---|---|---|
AssetDefinition.php |
35 skaler sabit: CDN URL'leri (Bootstrap 5.3.2, Font Awesome 6.5.1, Bootstrap Icons 1.11.3, Remix Icon 4.2.0, flag-icons 6.6.6, jQuery 3.7.1 ['path'=>…, 'renderInHead'=>true], Sortable 1.15.2, AOS 2.3.4) ve çatı varlık takma yolları (@fw/RbnAdmin/css/…, @fw/RbnCommon/css/…). |
— |
AssetBundles.php |
STACK_MAP (4: universal, frontend, panel, auth), BUNDLES (24 paket: rbn_master_js, fonts_panel, fonts_auth, bootstrap, font_awesome, bootstrap_icons, remix_icon, flag_icon, jquery, admin_core_css, rbn_core_frontend, rbn_core_panel, rbn_core_auth, rbnExtended, rbnModal, rbnDashboard, rbnCharts, rbnTable, sortable, aos, rbn_master, security, project, frontend). |
— |
AssetFonts.php |
FONT_LIBRARY (33 yazı tipi; ad → Google Fonts tanımı) + 16 ad sabiti (INTER, OUTFIT, GEIST, …). |
— |
AssetConvention.php |
Favicon/OG görseli adlandırma kuralı: favicon-<project_key>.{svg,png,ico}, og-image-<project_key>.{png,jpg,webp}, apple-touch-icon-<project_key>.png, manifest-<project_key>.{webmanifest,json} (images/ altında); sanal OG adı deseni og-image-<ad>.<uzantı>. |
faviconCandidates(?string), ogImageCandidates(?string), findFavicon(?string), findOgImage(?string), findAppleTouchIcon(?string), findManifest(?string), resolveVirtualOgImage(string), isVirtualOgImageName(string), ogImageMimeType(string) (hepsi static) |
2.4 Legal/
Yasal sayfa motorunun tanımları (Yasal-Sayfa-Motoru.md): LegalPages (sayfa kayıt defteri: PAGES 7, PLACEHOLDERS 15, IDENTITY 11, ALIASES 14, CAPABILITIES 3, OPTIONAL 6, REQUIRED_FOR_SALES 4), LegalTemplate (şablon motoru: inspect(), render()), CookieInventory (çerez kayıt defteri: ENTRIES 4, entries(array $capabilities)).
3. Akış
3.1 Ad alanı tamamlama
NamespaceResolver::find() registry'den kısa ad (Core\Services\…) aldığında NamespaceExpansionTrait::expandRegistryResult() önce Definition::get('namespace','FRAMEWORK_PREFIX') ile, sonra PROJECT_PREFIX ile öneki ekleyip class_exists dener. resolveCoreLayer() Definition::get('namespace','MAP') içindeki her taban ad alanını sırayla dener.
3.2 Klasör yolu
FolderContext::path('FRAMEWORK.CORE.SYSTEM') ağaçta noktalı anahtarı yürür; her düğümde ['folder'=>…] varsa o ad, yoksa anahtarın kendisi ya da değeri yola eklenir; matriste olmayan parça ham eklenir (ayrıntı ve ölçüm: Paths §5).
3.3 Favicon/OG görseli (AssetConvention)
Dört kapı (meta etiketleri SeoResolver, sanal varlık sunumu AssetController, /favicon.ico yönlendirmesi RedirectManager, JSON-LD image SchemaResolver) aynı aday sırasını bu sınıftan alır: önce proje anahtarlı ad, sonra anahtarsız eski adlar ("son geri dönüş").
4. Yapılandırma
Bu klasördeki tüm değerler sabittir. RouteBlueprint::FILES['project'] boş olduğundan proje rota dosyası otomatik yüklenmez; yüklenecek dosya adları buraya eklenir ve Paths::project()->routes() altında aranır (Discovery §5.10).
5. Tuzaklar ve kurallar
NamespaceMap::COMPONENT_REGISTRYvar olmayan bir sınıfı gösterir:\Rbn\Framework\Core\System\Registries\ComponentRegistry::class(NamespaceMap.php:31);class_existsfalsedöner — gerçek sınıfCore\System\Kernel\Stages\ComponentRegistry'dir. SabitinCore/Bundles/Packagesaltında başka okuyucusu yoktur (tek eşleşme tanımın kendisidir), bu yüzden bugün zarar vermez; ama okunursa yanlış sınıfa gider.identitykategorisiDefinition::getiçinde yakalanır:FrameworkIdentity$definitionCategory = 'identity'taşır, amaDefinition::get('identity', …)çözücüye gitmedenAssetConfig::PROXY_SETUP'tan yalnızPROXY_PATHS/PROXY_TOKENSdöndürür, diğer her anahtar içinnullverir (Definition.php:54). Marka sabitlerineDefinition::getile değilRbnSystemInfo::get()ya da doğrudanFrameworkIdentity::<SABİT>ile ulaşılır. Genel kural: kategori adı açık verilmediyse dosya adından türer (DefinitionResolver.php:117); dosya adı değişirseDefinition::getçağrılarıLogicExceptionverir.DefinitionResolverCore/Support/Definitionsaltındaki tüm*.phpdosyalarınırequire_onceeder; bu klasöre yan etkili (kod çalıştıran) dosya konmamalıdır.NamespaceMap::MAPanahtarları aynı hedefe birden çok ad verir (SuiteveRbnSuite;ModulesveProject.Modules;AppveProject.App);resolveCoreLayer()ilk bulunanı kullanır.ComponentTypes::MAPsonekten türe (22 giriş),PLURAL_MAPtürden kayıt anahtarına (22 giriş) gider; iki tablonun anahtar kümeleri aynı değildir (PLURAL_MAP'tealias,metadata,constant,command,validationvardır,MAP'teGuard,Library,Validatorgibi sonekler vardır). Yeni bileşen türü eklenirken iki tabloya da bakılmalıdır.RouteBlueprint::HONEYPOT_PATHS(35 yol) kurum bilgisi taşımaz; listeTrafficProvider::record()ve tuzak yol koruması tarafından okunur — içerik burada kopyalanmadı.- Marka bilgisi yalnız
FrameworkIdentityiçindedir (Anayasa §9):example.tr,info@example.tr,example; framework kodu başka yerde marka/proje adı yazmaz. - CDN adresleri sürüme sabitlenmiştir (
bootstrap@5.3.2,font-awesome/6.5.1, …); güncellemeAssetDefinitiondeğişikliğidir. İntegrity (SRI) özniteliği bu dosyada yoktur.
6. Örnek (gerçek koddan)
// Core/System/Kernel/Stages/Autoload.php:41
$projectPrefix = Definition::get('namespace', 'PROJECT_PREFIX') ?: 'Rbn\Project\\';
// Core/Support/Definitions/System/ComponentTypes.php:83-87
public static function pluralize(string $type): string
{
$lowType = strtolower($type);
return self::PLURAL_MAP[$lowType] ?? $lowType . 's';
}