Core/Render/Configs — sabit tanım dosyaları (5 dosya)
Doğrulanan kod tabanı:
c23b431f· 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/Render/Configs/— 5*.php.
Envanter: 5 dosyanın 5'i anlatıldı.
Doğrulama platformu: Windows + PHP 8.3, tüm sabitler reflection/erişimle ölçüldü.
1. Ne işe yarar, kim kullanır
Beş BaseConfig türevi, Render katmanının derleme zamanı sabitlerini tutar:
asset vekili kurulumu, view yönerge eşlemesi, robots kuralları, SEO varsayılanları,
breadcrumb sözlüğü. Hepsinin tek ortak yanı statiktir — örnek üretilmez,
$service->config(...) ile okunmaz, doğrudan Sınıf::SABİT çağrısıdır.
Kimler kullanır: ViewEngine (ViewConfig), AssetBuilder (AssetConfig),
AssetController (AssetConfig), SystemGuardHandler (AssetConfig),
RobotsResolver (RobotsConfig), SeoResolver/SeoBuilder (SeoConfig),
BreadcrumbResolver/BreadcrumbBuilder (BreadcrumbConfig).
Tuzak: Dizin adı Configs (çoğul). Kayıt haritasında iki yerde tekil
Config yazılmıştır: SystemResourceMapTrait içinde
resource.metadata['KIT_'] => 'Core\Render\Config\AssetConfig' ve
'SEO_' => 'Core\Render\Config\SeoConfig' — bu iki yol gerçek değil
(System/Registries.md §5 §5.3'te ölçülmüştür).
2. Klasör/dosya envanteri (5/5)
| Dosya | Görev | Sabitler / yöntemler |
|---|---|---|
AssetConfig.php (91) |
Varlık vekili kurulumu, küme kaydı, proxy host beyaz listesi, uzantı→grup haritası. | NAME='RbnKit', VERSION='1.0', PROXY_SETUP, CLUSTER_REGISTRY, PROXY_ALLOWED_HOSTS, EXTENSION_MAP |
ViewConfig.php (51) |
View yönerge eşlemesi (10 yönerge). Yapısal yönergeler ViewEngine'de. |
static directives(): array |
RobotsConfig.php |
robots.txt kuralları: disallow listeleri, izinli yollar, dosya boyutu sınırı, Google özel tarayıcı belirteçleri. |
NAME='RbnRobots', VERSION='1.0', MAX_BYTES=512000, SPECIAL_CRAWLERS, ROBOTS_DISALLOWS, SYSTEM_DISALLOWS, CORE_DISALLOWS, ASSET_DISALLOWS, ALLOWED_PATHS |
SeoConfig.php (45) |
SEO varsayılanları ve marka görselleri (data-URI SVG). | NAME='RbnSeo', VERSION='1.3', SLOGAN, OG_IMAGE, LOGO_SVG, static defaults(): array |
BreadcrumbConfig.php (83) |
Kırıntı sözlüğü: gizlenen alan adları, aksiyon→ikon/etiket haritası, terminal aksiyonlar. | NAME_BLACKLIST, ACTION_ICON_MAP, TERMINAL_ACTIONS |
3. AssetConfig — ölçülen değerler (AssetConfig.php)
PROXY_SETUP anahtarları = ['version','project','framework']
PROXY_SETUP['version'] = '1.0'
PROXY_SETUP['project'] = {"path":"project-assets","token":"@project/"}
PROXY_SETUP['framework'] = {"path":"framework-assets","token":"@fw/"}
PROXY_ALLOWED_HOSTS = [] ← BOŞ (dış CDN kullanımı için elle eklenmeli)
CLUSTER_REGISTRY anahtarları = ['core','project','kit']
core => ['label'=>'Core', 'folder'=>'']
project => ['label'=>'Project', 'folder'=>null] ← null = Public Root referansı
kit => ['label'=>'RbnKit', 'folder'=>'RbnKit']
EXTENSION_MAP = css→css, js→js, mjs→js, less→css, scss→css,
png→image, jpg→image, svg→image, json→data
PROXY_SETUP doğrudan HTML'e yansır: View::result() :193-194 bu değerlerden
/project-assets/ ve /framework-assets/ öneklerini alıp normalizeHtmlUrls()
'a verir.
4. RobotsConfig — robots.txt sabitleri
Kaynak: E:\localhost\docs\google-arama\robots-txt.md, araclar-ve-botlar\google-tarayicilari.md, adsense\ads-txt.md.
MAX_BYTES = 512000— robots.txt 500 KiB altında kalır (Google fazlasını yok sayar);CrawlerProvider::renderRobots()aşılırsaLengthExceptionfırlatır.SPECIAL_CRAWLERS = ['AdsBot-Google','AdsBot-Google-Mobile','Mediapartners-Google','APIs-Google']— bu tarayıcılar*grubunu yok sayar; her biri*ile AYNI kuralları taşıyan kendi grubunu alır (geliştirme/staging'deDisallow: /).ALLOWED_PATHS/ads.txtiçerir: ads.txt hiçbir grupta engellenmez. Frameworkads.txtÜRETMEZ; dosya içeriği yayıncının AdSense hesabındaki öneriden alınır ve alan adı kökünde yayınlanır.Crawl-delayyazılmaz (Google desteklemez; Bing ve Yandex için de değer yazılmaz). ÖncekiBOT_RULESveDEFAULT_CONFIG(crawl_delay,cms_versionvb.) kaldırıldı.- Docs tablosunda olmayan bot belirteci yazılmaz; yapay zeka botları (OAI-SearchBot, GPTBot, PerplexityBot, ClaudeBot, Google-Extended) için framework ayrı grup YAZMAZ, karar site sahibinindir ve
*kuralları bu botların içerik yollarını engellemez.
5. BreadcrumbConfig — ölçülen değerler (BreadcrumbConfig.php)
TERMINAL_ACTIONS = ["view","show","preview","download"] (:77).
Bu liste, aksiyon adı bunlardan biriyse kırıntının son adım olduğunu
belirler (alt sayfa üretilmez).
NAME_BLACKLIST (17 alan, :17):
id, parent_id, user_id, created_at, updated_at, deleted_at, slug, is_active, status, type, order, sort, hit_count, password, token, csrf_token, remember_token, view_source
Güvenlik açısından önemli: password, token, csrf_token, remember_token
listedir → kırıntı etiketi olarak asla basılmaz. Bu, BreadcrumbResolver'ın
normalizeIcon()/build() akışındaki ilk savunmadır (veritabanı sütun
adlarından etiket üretildiği için).
ACTION_ICON_MAP — 27 aksiyon, her biri {icon, label}:
index, logs, log, edit, update, delete, remove, create, add, view, show, settings, config, list, search, history, stats, analytics, report, users, profile, developer, unread, read, trash, group, manage, wizard
Örnekler: edit => {icon:'bi bi-pencil-square', label:'Düzenle'},
trash => {icon:'bi bi-trash', label:'Çöp Kutusu'}.
Tuzak: İkonlar Bootstrap Icons sınıflarıdır (bi bi-*). AssetBuilder
panel/auth bağlamında bootstrap_icons'ı atlar (Builders.md §5.5) — yani
panel/auth'ta kırıntı ikonları stil olarak yüklü değildir, ikon yerine boş
kutu çizilir. Bu, iki katmanın birbirinden habersiz kararıdır.
6. ViewConfig::directives() — 10 yönerge (tam liste)
Ölçüldü: count(ViewConfig::directives()) = 10.
README §3.4 tablosunda birebir karşılaştırmalı liste var. Özet:
| Yönerge | Kaynak |
|---|---|
@hasrole / @endhasrole |
ViewConfig.php:28 |
@csrfToken, @csrf, @method('…') |
:32-34 |
@sys('…') |
:37 |
@path(…), @import(…) |
:43-44 |
@php / @endphp |
:47-48 |
Güvenlik notu (kod yorumu :40-42): @import → ViewEngine::import() →
path() + compile(); iki katman da kök sınırı kontrolü yapar, yani
@import('../../evil.php') require edilemeden reddedilir.
Yapısal yönergeler ViewConfig'te DEĞİLDİR: @if/@elseif/@else/@endif,
@foreach/@endforeach, @for/@endfor, @extends/@section/@endsection/@yield
→ ViewEngine::parseDirectives() içinde sabit dizi (ViewEngine.php:216),
ViewConfig::directives() bunlara array_merge ile eklenir (:236-237).
Sonuç: ViewConfig'i düzenlemek yeni yönerge ekler; yapısal yönergeleri
değiştirmek için ViewEngine düzenlenmelidir.
7. Tuzaklar ve kurallar
ViewConfig::directives()her çağrıda yeni dizi kurar (:23-49) —
sabit dizi değil.ViewEnginebunu bir kez çağırıp
self::$cachedDirectivesiçinde saklar (ViewEngine.php:236), yani
ViewConfig'i çalışma zamanında değiştirmekViewEngineönbelleğini
geçersiz kılmaz.@csrfve@csrfTokenViewHelperTraitDNA'sına bağlıdır
(ViewConfig.php:31yorumu) —csrfToken()/csrfField()metotları view
nesnesinde yoksa derleme çalışma zamanında fatal verir. Bu metotlar
BaseManager/BaseControllerpublic listesinde ölçüldü (csrfToken,
csrfField,csrfMeta,methodField— hepsi public).ViewBaseRender
→BaseComponent→BaseContextTraitzinciri üzerinden erişir.PROXY_ALLOWED_HOSTSboş olduğu için dış CDN 404 verir
(Controllers.md §3.1, ölçüldü).SeoConfig::OG_IMAGEveLOGO_SVGdata-URI SVG'dir (:23, :26) —
dosya sistemi bağımlılığı yoktur, ama<karakteri ham yazılmıştır;
htmlspecialcharsuygulayan bir katmandan geçerse bozulur. Ölçüldü: değerler
data:image/svg+xml,<svg …>biçiminde,"yok (ham tırnak).CLUSTER_REGISTRY['project']['folder'] = null(:47) — "Public Root
referansı" anlamına gelir;AssetBuilderbu anahtarı kullanmaz,null
değerstrtolower(null)gibi bir yerde çağrılırsa PHP 8.3'te deprecated
uyarısı verir (kodda bu yol ölçülmedi).
8. Örnek (gerçek koddan)
// Core/Render/Configs/AssetConfig.php:24-34
public const PROXY_SETUP = [
'version' => self::VERSION,
'project' => [
'path' => 'project-assets',
'token' => '@project/'
],
'framework' => [
'path' => 'framework-assets',
'token' => '@fw/'
]
];
// Core/Render/View.php:189-202 (sabitler doğrudan HTML'e yansır)
$setup = AssetConfig::PROXY_SETUP;
$source = in_array($this->type, ['framework','core'], true) ? 'framework' : 'project';
$proxyPath = $setup[$source]['path'] ?? 'project-assets';
$prPrefix = '/' . ($setup['project']['path'] ?? 'project-assets') . '/';
$fwPrefix = '/' . ($setup['framework']['path'] ?? 'framework-assets') . '/';
return $this->renderedHtml = $this->normalizeHtmlUrls($html, null, [
'pr_prefix' => $prPrefix, 'fw_prefix' => $fwPrefix,
'proxy_path' => $proxyPath, 'media_prefix' => '/media/'
]);
9. İlgili belgeler
- Core/Render genel · Builders · Providers ·
Resolvers · Controllers - Core/Base/Data.md (
BaseConfigtabanı) ·
Core/Support/Definitions.md (AssetBundles,AssetConvention,AssetFonts) ·
Kavram: asset ·
Açık sorular §1.12 (cms_version/VERSIONçakışması,Config/Configsyolu)