Core/Base/Web — controller, render ve sayfalama tabanları
Doğrulanan kod tabanı:
1d89c431(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/Base/Web/— 8*.php.
Envanter: 8 dosyanın 8'i aşağıda anlatıldı.
1. Ne işe yarar, kim kullanır
Web katmanının tabanları: BaseController (servis/model enjeksiyonu + view
bağlamı + SEO), BaseRender (view/layout/asset harmonisi), Paginator
(sayfalama), ve dört controller trait'i (view, CRUD, toplu işlem, indirme).
Kimler çağırır: Bundles/*/Controllers/*, Core/Render/Controllers/*
ve proje modüllerinin controller'ları; hepsi BaseController'dan türer.
2. Dosya envanteri
| Dosya | Görev | Önemli public yöntemler |
|---|---|---|
BaseController.php |
Controller kökü; SERVICE/MODEL sabitlerinden otomatik enjeksiyon, view bağlamı, noIndex(). |
__construct(), bootControllerSymphony(): void, reportComponentResolutionFailure(string $tur,string $ad,\Throwable $e): void, noIndex(string $directives='noindex, nofollow, noarchive, nosnippet, noimageindex'): self |
BaseRender.php |
Render harmonisi: view engine, resolver'lar, parça çözümleme. | __construct(?BaseService $rbn=null), bootHarmony(): array, prepare(string $type,?string $view,array $data): array, viewEngine(): ViewEngine, viewResolver(): ViewResolver, layoutResolver(): LayoutResolver, assetResolver(): AssetResolver, assetService(): AssetService, viewProvider(): ViewProvider, seoResolver(): SeoResolver, breadcrumbResolver(): BreadcrumbResolver, resolveFragment(string $viewPath,array $data): ?string, handleMissing(string $path): void |
Traits/Paginator.php |
Sayfalama nesnesi; URL kalıpları ve bağlantı üretimi. | __construct(?array $items,$controller=null), static make(?array $items=null,?int $total=null,int $perPage=15,?string $url=null): self, perPage(int): self, baseUrl(string): self, to(string $key): self, items(): array, total(): int, currentPage(): int, hasPages(): bool, lastPage(): int, onFirstPage(): bool, hasMorePages(): bool, previousPageUrl()/nextPageUrl(): string, links(): string |
Traits/Controller/ViewTrait.php |
Controller view bağlamı ve render. | getActiveView(): ?View, set(string\|array $key,$value=null): self, import(string $path): self, get(string $key), render(string $arg1,$arg2=[],$arg3=[]): View, paginate($items,int $perPage=10): Paginator |
Traits/Controller/ActionControllerTrait.php |
CRUD sonuç yönetimi, mesajlar, modal, API yanıtı, dönüş yolu. | getDetectedEntityName(): string, getCrudMessage(string $key,string $default): string, returnPath(mixed $subPath=null), handleResult($result,?string $message=null,mixed $path=null,mixed $context=null,array $data=[]), alert(string $type,string $message,string\|array $redirectOrData=[]): void, modal($id=null,?string $view=null): void, apiSuccess(mixed $data=[],string $message='…',int $code=200,array $meta=[]): void, apiError(string $message='…',int $code=400,mixed $errors=null,array $meta=[]): void |
Traits/Controller/Engine/CrudControllerTrait.php |
Oluştur/güncelle/sil/durum aksiyonları + beyaz liste bağlama. | create(): void, update(): void, delete($id): void, status(): void, crudInput(array $data): array, crudTargetModel(): ?object, logCrudInputDrops(object $model,array $fields): void |
Traits/Controller/Engine/BulkControllerTrait.php |
Toplu sil/durum/sıra/değer işlemleri. | bulkDelete($target=null,string $method='bulkDestroy',$redirect=null): void, bulkStatus($target=null,?bool $status=null,string $method='bulkToggleStatus'): void, bulkOrder($target=null,string $method='bulkUpdateOrder'): void, bulkValueUpdate(): void, handleBulkAction($target,string $method,array $extraParams=[],array $messages=[]): void |
Traits/Controller/Engine/DownloadControllerTrait.php |
Tekil/çoklu dosya indirme. | download($id=null,$service=null,string $method='download'): void, bulkDownload($ids=null,$service=null,string $method='downloadBulk'): void, respondDownload(string $filename,string $message): void, respondMultiDownload(array $downloads,string $message): void |
Kapsama: 8/8.
3. Akış
3.1 Controller kuruluşu ve istek
new PageController()
└─ BaseController::__construct() BaseController.php:29
├─ parent::__construct() → BaseComponent → bootConcernsContext() :32
│ └─ bootBaseContext(): controller olduğu için setActiveController($this)
│ ve extractIdentity()/hydrateComponents() çalışır
└─ bootControllerSymphony() :35
├─ SERVICE sabiti/props → $this->service = $this->service($ad) :45-54
│ (çözülemezse null bırakılır + log — B-37)
├─ MODEL sabiti/props → $this->model = $this->model($ad) :55-63
└─ (kimlik keşfi artık BaseContextTrait'te) :65-66
Dispatcher::callController() → $controller->index()
└─ ViewTrait::render('page.index', $data)
├─ BaseRender::prepare()/resolveFragment() BaseRender.php:132, 209
├─ ViewEngine::render() + LayoutResolver (bkz. ../Render)
└─ $response null ise Dispatcher getActiveView() ile basar
(../Routes/README.md §3.2)
3.2 CRUD + toplu işlem
$controller->update()
├─ CrudControllerTrait::update() CrudControllerTrait.php:40
│ ├─ crudInput() → getFillableFields() beyaz listesiyle ham veriyi bağlar :71-105
│ │ (liste boşsa davranış DEĞİŞMEZ; düşen alanlar loglanır :136-152)
│ ├─ $this->activeService->update($data)
│ └─ ActionControllerTrait::handleResult() → alert + yönlendirme ActionControllerTrait.php:156
4. Yapılandırma
| Öğe | Yer | Not |
|---|---|---|
noIndex() varsayılanı |
BaseController.php:99 |
noindex, nofollow, noarchive, nosnippet, noimageindex |
Paginator varsayılan sayfa boyutu |
Paginator.php:15 |
perPage = 15 |
ViewTrait::paginate() varsayılanı |
ViewTrait.php:110 |
perPage = 10 |
getCrudMessage() anahtarları |
ActionControllerTrait.php:55 |
{entity}.created, .updated, .deleted vb. |
5. Tuzaklar ve kurallar
- Servis/model çözülemezse
nullbırakılır ama log yazılır (B-37).
Davranış korunur, görünürlük eklenmiştir (BaseController.php:44). - Controller, aktif controller olarak kaydedilir. DNA (module/panel/
sub_module) önce controller'dan gelir (../README.md§3). - Beyaz listesi olmayan modelde CRUD verisi süzülmez.
crudInput()listeyi bağlar, liste boşsa elde değerler değişmez
(CrudControllerTrait.php:71). render()dönüşünullise DispatchergetActiveView()ile basar
(../Routes/README.md§3.2).- Paginator iki yapım biçimi vardır: dizi alırsa
preSlicedçalışır,
toplam + perPage alırsaCOUNTuygulanır (Paginator.php:15, 50). - View bağlamı otomatik dolar:
appName,projectKey,projectGroup,
appVersioncontroller kuruluşunda view'a verilir
(../Concerns/BaseContextTrait.php:102).
6. Örnek (gerçek koddan)
// View + sayfalama (ViewTrait.php:72, 110)
return $this->render('admin.pages.index', ['rows' => $rows, 'total' => $total]);
// Toplu işlem (BulkControllerTrait.php:19)
$this->bulkDelete($ids, 'bulkDestroy', 'admin.pages');
// API yanıtı (ActionControllerTrait.php:308, 331)
$this->apiSuccess(['id' => $id], 'Kayıt oluşturuldu');
$this->apiError('Doğrulama hatası', 422, $errors);
7. İlgili belgeler
- ../README.md, Services.md
- ../Routes/README.md — controller'ın çağrılma/dispatch akışı
- ../Http/README.md —
alert()/response()motorları ../Render/README.md(bu görevde üretilmemiş, ayrı iş kalemi) — view engine, layout, SEO