RbnAdmin/Models — kayıt merkezi, panel haritası ve kimlik
Doğrulanan kod tabanı:
d49b4413(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:Bundles/RbnSuite/RbnAdmin/Models/— 3*.php
Envanter: 3 dosyanın 3'ü anlatıldı.
Üst belge: README.md
1. Ne işe yarar, kimler kullanır
Bu klasörde hiçbir veritabanı modeli yoktur (RbnAuth ve RbnStudio'da ModuleData
adında bir sınıf vardır, burada öyle bir sınıf da yoktur — bu paketteki üç sınıfın
üçü de yapılandırma sınıfıdır). Üç görev üstlenirler:
ModuleData— paketin servis/provider kayıtlarını ve tüm HTTP
rotalarını tanımlar. Paket yüklenirkenRoute::module('suite','RbnAdmin')->load()
tarafından bulunur veregisterRoutes()çağrılır (Core/Routes/Route.php:143).PanelMap— panel menüsünün ağacı: hangi modül, hangi başlık, hangi ikon,
hangi kontrolör. Menü ve breadcrumb bu sabitten üretilir.PanelIdentity— panelin SEO/OG/meta verisi ve varsayılan bilgilendirme
metinleri.
2. Dosya envanteri
| Dosya | Sınıf | Taban | Görev | Önemli üyeler |
|---|---|---|---|---|
ModuleData.php |
ModuleData |
BaseConfig |
Kayıt merkezi + rota tanımı | #[Bundle(name:'rbnadmin', context:'panel', map: PanelMap::MAP)] (:21-25), registerMap(): array (:33), registerRoutes(): void (:52) |
PanelMap.php |
PanelMap |
BaseConfig |
Panel gezinme ağacı | public const MAP (:19-167) |
PanelIdentity.php |
PanelIdentity |
BaseConfig |
Kimlik + SEO + varsayılan metinler | THEME_COLOR = '#c56a3c' (:17), FAVICON (:18), PANEL_IDENTITY (:23), DEFAULT_INFO (:47), VIEW_MAP (:71) |
3. ModuleData::registerMap() — kayıt defteri (:33-46)
'services' => ['analytics' => AnalyticsService, 'socialmedia' => RbnAdminService, 'rbnAdmin' => RbnAdminService],
'providers' => ['analytics' => AnalyticsProvider, 'social' => SocialMediaProvider],
analyticshem servis hem provider → farklı türler, çakışma yok.RbnAdminServiceiki anahtara birden yazılıyor (socialmedia,rbnAdmin).socialmediaayrıca global kayıt defterinde de var
(Core/System/Registries/RegistryMap/SystemLogicMapTrait.php:78).
4. ModuleData::registerRoutes() — paketin 9 rota grubu
| # | Prefix | Kontrolör | Uç sayısı | Satır |
|---|---|---|---|---|
| 1 | (yok) | RbnAdminController |
4 | :55-60 |
| 2 | webtraffic |
WebtrafficController |
5 | :63-69 |
| 3 | hostmailhub |
HostmailhubController |
6 | :72-79 |
| 4 | seo-report |
SeoReportController |
1 | :82-84 |
| 5 | users |
UserManagementController |
12 | :87-105 |
| 6 | settings |
AdminSettingsController |
2 | :108-111 |
| 7 | bot-settings |
BotSettingsController |
9 | :114-124 |
| 8 | cron |
CronLogsController |
7 | :127-135 |
| 9 | contact |
ContactController |
9 | :138-148 |
| 10 | notification |
NotificationController |
5 | :151-157 |
Toplam: 60 uç (ölçüldü: Select-String "Route::(get|post)\(" → 60 eşleşme).
Bunların tamamı Route::middleware('admin') → Route::panel('admin') grubunun
içine yüklenir (Core/Routes/Mappings/core.php:75).
Rota adlandırma tutarsızdır: yalnız 7. ve 8. gruplar (bot-settings, cron)
->name('admin.…') kullanır — 16 uç (ölçüldü: 16 name('admin eşleşmesi);
diğer 8 gruptaki 44 uç adsızdır. Adı olmayan rotalar returnPath()'in
adlandırılmış rota keşfini kullanamaz
(Core/Base/Web/Traits/Controller/ActionControllerTrait.php:69-…).
5. PanelMap::MAP — panel ağacı
Kök: identity ('Yönetim Paneli', ikon ri-dashboard-line), sub_modules altında
11 üst düğüm:
| Anahtar | Başlık | controller ipucu |
Alt düğümler |
|---|---|---|---|
webtraffic |
Webtraffic Analitik | yok (türetilir: WebtrafficController) |
logs, report, google-analytics (→ map) |
navigation |
Navigasyon Yönetimi | yok | sidebar → SidebarController |
hostmailhub |
E-Posta Yönetimi | HostmailhubController |
— |
seo-report |
SEO Analizi | SeoReportController |
— |
users |
Kullanıcı Yönetimi | UserManagementController |
profile, activities |
settings |
Sistem Ayarları | AdminSettingsController |
— |
bot-settings |
Bot & API Ayarları | BotSettingsController |
apis, tasks, ai-usage |
cron |
Zamanlanmış Görevler | CronLogsController |
cronlogs |
contact |
İletişim Mesajları | yok | — |
notification |
Sistem Bildirimleri | yok | — |
controller ipucu yoksa ModuleDataDriver anahtardan türetir:
PascalCase(slug) . 'Controller' (Core/System/Discovery/Engine/Drivers/ModuleDataDriver.php:185).
Yani contact → ContactController, notification → NotificationController
otomatik eşleşir; yazmamak bir hataya yol açmıyor, sadece örtük.
6. PanelIdentity — kimlik ve metinler
THEME_COLOR = '#c56a3c'(Terracotta) veFAVICON = '@fw/images/favicon-rbnadmin.svg'(:17-18).PANEL_IDENTITY['seo']robots = 'noindex, nofollow'(:29) — yönetim paneli
dizinlenmemeli, kasıtlı.- Başlıklar
FrameworkIdentity::ADMIN_TITLE . ' | ' . FrameworkIdentity::ADMIN_NAME
sabitlerinden gelir (:25,33) — marka adları tek kaynaktan. DEFAULT_INFOyalnızdashboardvesettingsiçin metin taşır (:47-66);
diğer 9 panel modülü için karşılığı yoktur → görünümler kendi metinlerini yazar.VIEW_MAPyalnız iki anahtar içerir (:71-74) ve hiçbir kod tarafından okunmaz
(ölçüldü:VIEW_MAParaması yalnız bu tanımı bulur). RbnAuth'ınVIEW_MAP'i de
benzer biçimde tanımlıdır (RbnAuth/Models/AuthIdentity.php:109).
Karşılaştırma: PanelIdentity bir #[Bundle] özniteliği taşıyan ModuleData
tarafından config['identity'] olarak okunur (ModuleDataDriver.php:171), ama
RbnAdmin/Models/ModuleData.php içinde CONFIG sabiti yoktur — kimlik
#[Bundle(map: PanelMap::MAP)] üzerinden MAP['identity'] alanından gelir
(ModuleDataDriver.php:162).
7. Tuzaklar
-
PanelMapiçindekiSidebarControllerbu pakette değildir.
PanelMap.php:63navigation.sidebar.controller = 'SidebarController'der;
sınıfBundles/Internal/Backstage/Controllers/SidebarController.php:14'te yaşar.
ModuleDataDriverbu ipucuylacontroller_mapüretir
(ModuleDataDriver.php:182), yani panel haritası kasıtlı olarak
komşu pakete işaret eder. Ama RbnAdmin'ınregisterRoutes()'ındanavigation
rotası yoktur (:52-158) → menüde görünen bir düğüm için RbnAdmin tarafında
uç yoktur. -
identitydüğümü yalnızPanelMap'te vardır,ModuleDatatarafından
türetilmez.ModuleDataDriveridentityalanını$map['identity']üzerinden
okur (:162) ve yoksaucfirst($bundle->name)='Rbnadmin'yazar (:165).
PanelMap::MAP['identity']['title']='Yönetim Paneli'doğru değer; yalnız
ModuleDataregisterMap()'i döndürmediği için bu yol harita dosyasına
bağımlıdır. -
Rota adlandırma tutarsızlığı (§4). Adlandırılmamış rotalarda
returnPath('users/profile')gibi dize yollar kullanılmak zorundadır;
handleResult()'ınreturnPath()çağrısı (ActionControllerTrait.php:227)
ad çözemediğinde dizeyi olduğu gibi döndürür (:143-147). -
users/storerotası var,store()metodu yok — bu bir ölü uçtur. ⚠️
ModuleData.php:91→Route::post('store', 'store'), ancak
UserManagementController(ve tabanıCrudControllerTrait)store()metodunu
taşımaz; CRUD oluşturma ucucreate()'dir (CrudControllerTrait.php:24).
Ölçüldü:ReflectionClass(UserManagementController::class)->hasMethod('store')
→false;hasMethod('create')→true.Dispatcherbu durumda metot yok
yoluna düşer veRuntimeExceptionfırlatır
(Core/Routes/Engine/Dispatcher.php:173); üretimde mesaj
'Controller not found or method missing.'olur.
Bu uç muhtemelen hiç kullanılmıyor (ekranlarupdate/{id}veya servis
tarafından oluşturma yapıyor), ama rota tablosunda "var" göründüğü için
geliştirici yanlış yönlendirilir. Aynı gruptaupdate/([0-9]+)→update
var (CrudControllerTrait.php:40), yani güncelleme çalışır, ekleme çalışmaz.
Aynı desen RbnStudio'da yoktur (orada teksaveucu hem ekler hem günceller). -
usersgrubustoreveupdate/{id}uçlarını ayırır — bu ayrımın
niyeti "oluştur" / "güncelle" idi, ama yalnız yarısı bağlı (tuzak 4).
RbnStudio'da teksaveucuidyoksa ekleme, varsa güncelleme yapar
(RbnStudio/Controllers/PostsController.php:112). -
Route::get('modal/?([0-9]*)', 'modal')kalıplarıusers(:90) ve
contact(:143) gruplarında seçenekli parametre kullanır — diğer tüm
modal uçlarımodal/{id?}biçimindedir. İki yazım da çalışır ama birleştirilse
daha tutarlı olur. -
deleteuçlarının tamamı POST'tur — ölçüldü:users/delete(:94),
contact/delete(:144),contact/restore(:145),contact/destroy(:146),
notification/delete(:155),hostmailhub/delete(:76) — hiçbiri GET
değil. CSRF yüzeyi yoktur; bu RbnStudio'nın aksine güvenli taraftadır
(RbnStudio'daRoute::get('delete/{id}')da kayıtlıdır, bkz.
RbnStudio §5). -
PanelIdentity::VIEW_MAPölü — RbnAuth'ınki değil. §6'da ölçüldü:
grep VIEW_MAP→ yalnız bu tanım. Karşılaştırma: RbnAuth'ınVIEW_MAP'i
Core/Render/Handlers/UI/AuthHandler.php:30tarafından okunur; panelin
karşılığı olanPanelHandleryalnızcommunicationservisini sorgular
(Core/Render/Handlers/UI/PanelHandler.php:40) ve kimlik sabitlerini
kullanmaz (:30: "kaynak, aktif kontrolörden DNA mirasıyla otomatik gelir"). -
registerMap()providersaltındaanalyticsvar ama
AnalyticsProvider'ın$targetModel = 'Users'(AnalyticsProvider.php:18) —
yani bu provider trafikle değil kullanıcı tablosuyla çalışır. Adı yanıltıcıdır.
8. Örnek (gerçek koddan)
Paketin rotaları nasıl yüklenir (çağıran taraf Core/Routes/Route.php:139):
// Bundles/RbnSuite/RbnAdmin/Models/ModuleData.php:72-79
Route::prefix('hostmailhub')->controller('HostmailhubController')->group(function () {
Route::get('/', 'index');
Route::get('modal/{id?}', 'modal');
Route::post('create', 'create');
Route::post('delete/{email?:[a-zA-Z0-9_\.-]+}', 'delete');
Route::post('change-password', 'changePassword');
Route::get('eternalLink', 'eternalLink');
});
9. İlgili belgeler
- RbnAdmin README · Controllers.md · Providers.md
- Core/Routes —
Route::module(),Route::prefix() - Core/Support/Definitions —
FrameworkIdentity - RbnStudio — aynı kalıbın (
#[Bundle]+registerRoutes) ikinci örneği