NEXT-GEN CONTENT MANAGEMENT FRAMEWORK

CPalius CMF

Bir İçerik Yönetim Sisteminden
"Kurşun Geçirmez" Kurumsal Uygulama Framework'üne

Modern web ekosisteminde hazır eklenti sistemleriyle donatılmış ama hantal CMS'ler ile her şeye sıfırdan başlamayı gerektiren saf framework'ler arasındaki köprüyü kuran, dünya standartlarında optimize, güvenli ve genişletilebilir altyapı.

PHP 8.2+ Symfony 7.4 LTS Doctrine ORM AssetMapper Açık Kaynak

Teori, Pratik ve "Tekerleği Yeniden İcat Etme" Sancısı

Modern web geliştirmede her yeni proje, iki ucu keskin bir bıçağın üzerinde başlar. CPalius bu iki dünya arasındaki boşluğu doldurmak için doğdu.

Mevcut Sorunlar

Klasik CMS'ler (WordPress, Drupal)

Hazır eklenti ve tema sistemleriyle donatılmış ancak hantal veritabanı şemaları, teknik borç dağları ve güvenlik zaafiyetleriyle boğuşan yapılar.

Saf Framework'ler (Symfony, Laravel)

Her projede auth, ACL, dosya yönetimi ve admin paneli gibi temel bileşenleri sıfırdan yazarak zaman kaybettiren yaklaşım.

Sıfırdan MVC Romantizmi

Kendi framework'ünü yazmak kulağa romantik gelse de güvenlik (CSRF, XSS, SQLi), DI Container ve HTTP katmanı gibi devasa bir "görünmez buzdağı" barındırır.

CPalius Çözümü

Dünya Standartlarında Altyapı

Symfony 7.4 LTS'nin kanıtlanmış güvenlik ve performans altyapısı üzerine inşa edilmiş, teknik borçtan arınmış mimari.

Hazır Kurumsal Bileşenler

Auth, ACL, dosya yönetimi, çok dilli yapı ve admin paneli gibi temel bileşenler ilk günden çekirdekte. Tekerleği yeniden icat etmeye son.

Modüler ve Genişletilebilir

CMS'ten öte bir uygulama platformu: Oto Galeri, Turizm Acentası, CRM/ERP — hepsi aynı altyapı üzerinde çalışır.

Çökmeyen Çekirdek

Kullanıcı modüllerinden gelen hatalar sistemi asla çökertmez. 3 kademeli aktif savunma ve karantina hattı.

"Pristine Root" ve Klasör Mimarisi

Standart bir Symfony projesinde üçüncü parti paketler ve tarifler yüklendikçe ana dizin dosya çöplüğüne döner. CPalius, "Tertemiz Ana Dizin" politikasını benimsedi.

pristine-root
CPalius/
│
├── cp-core/          # KERNEL & SYSTEM SPACE
│   ├── bin/          # Konsol komut aracı
│   ├── config/       # Core konfigürasyonları
│   ├── migrations/   # Veritabanı göç dosyaları
│   ├── src/          # PHP sınıfları (App\\)
│   └── var/          # Cache, log, SQLite
│
├── cp-includes/      # DEPENDENCIES SPACE
│   └── vendor/       # Composer paketleri
│
├── cp-content/       # USER & DEVELOPER SPACE
│   ├── config/       # Config Sync alanı
│   ├── modules/      # Bağımsız modüller
│   ├── themes/       # UI temaları
│   └── translations/ # Çeviriler (tr, en)
│
├── public/           # WEB ROOT
│   ├── index.php     # Front Controller
│   └── assets/       # Frontend varlıkları
│
├── .env
└── composer.json
cp-core/ Kernel & System Space

Çekirdek PHP sınıfları, konfigürasyonlar, konsol araçları ve veritabanı göç dosyaları. Symfony Flex tariflerinin doğrudan bu alana kurulması garanti altındadır.

cp-includes/ Dependencies Space

Composer paketleri ve Symfony kütüphaneleri bu izole alanda tutulur. vendor-dir yeniden yapılandırılmıştır.

cp-content/ User & Developer Space

Modüller, temalar, çeviriler ve Config Sync alanı. Geliştiricinin kendi kodları ile framework sistem dosyaları asla birbirine karışmaz.

public/ Web Root

Dışarıya açık tek klasör. Front Controller (index.php) ve derlenmiş frontend varlıkları burada yer alır. Güvenlik sınırı.

"Core Never Dies" — Çökmeyen Çekirdek Mimarisi

Kullanıcı alanından gelebilecek kötü yazılmış veya bozuk kodların tüm sistemi kilitlemesini engelleyen Üç Kademeli Aktif Savunma ve Karantina Hattı.

1
1. Savunma Hattı

Tavuk-Yumurta Probleminin Çözümü

Symfony boot edilirken config/bundles.php dosyası okunur. Bu aşamada henüz veritabanı bağlantısı, servis konteyneri veya autoloader tam olarak ayağa kalkmamıştır. Modüllerin aktiflik durumunu doğrudan veritabanından okumaya çalışırsak, sistem daha boot edilemeden kilitlenir.

Çözüm: CPalius, bir modül aktif/pasif edildiğinde active_modules.php adında statik, PHP opcache dostu bir dizi dosyası üretir. bundles.php sadece bu dosyayı okur — veritabanına hiç dokunmaz.

cp-core/config/bundles.php
// Çekirdek her zaman ayakta
$bundles = [
    FrameworkBundle::class => ['all' => true],
    TwigBundle::class      => ['all' => true],
    DoctrineBundle::class  => ['all' => true],
    CoreBundle::class      => ['all' => true],
];

// Aktif modülleri dosyadan oku
$activeModules = require 'active_modules.php';
foreach ($activeModules as $moduleClass) {
    if (class_exists($moduleClass)) {
        $bundles[$moduleClass] = ['all' => true];
    }
}
2
2. Savunma Hattı

Çalışma Zamanı İzolasyonu

Sınıfın fiziksel olarak var olması (class_exists), o modülün kodunun hatasız çalıştığı anlamına gelmez. Modülün boot() metodu içinde fırlatacağı bir TypeError veya RuntimeException tüm sistemi çökertebilir.

Çözüm: Kernel::boot() metodu override edilerek modül seviyesindeki tüm boot süreçleri try/catch (\Throwable) zırhıyla kuşatıldı. Hatalı modül otomatik karantinaya alınır, çekirdek çalışmaya devam eder.

3
3. Savunma Hattı

Compile-Time Kilitlenme Koruması & Dry-Run

Eklentideki geçersiz bir YAML sözdizimi veya yanlış bir DI tanımı, Symfony container'ı derlenemez hale getirir. Bu durumda terminalde komut bile çalıştırılamaz.

Çözüm: Modül aktive edilmeden önce symfony/process ile izole bir alt süreç başlatılır. Bu süreçte cache:clearlint:yamllint:container komutları koşturulur. Hata varsa aktivasyon iptal edilir ve modül kalıcı olarak karantinaya alınır. Dosya asla bozuk haliyle kaydedilmez.

Veri Modeli ve Platform Yetenekleri

Hibrit veri modeli, yüksek performanslı indeksleme ve çok dilli yapı — tümü ilk günden çekirdeğin hücrelerine işlenmiştir.

Hibrit Veri Modeli

Sık sorgulanan temel alanlar (ID, Başlık, Slug, Durum) gerçek sütunlarda; dinamik, esnek alanlar (gövde, SEO, galeri) tek bir JSON sütununda. EAV'ın JOIN cehenneminden ve WordPress'in meta karmaşasından kurtulun.

Flat Field Index Motoru

JSON verilerini veritabanı bağımsız sorgulayın. NodeFieldIndex tablosu ve Doctrine Event Listener ile tip-uygun kolonlara sahip indeks tablosu. SQLite, MySQL ve Postgres'te aynı DQL çalışır.

Çok Dilli Yapı (i18n)

Çoklu dil ilk günden çekirdeğe işlendi. Kompozit benzersizlik kısıtları ile UNIQUE(slug, locale) ve UNIQUE(translation_group_id, locale) güvencesi. Dil sonradan eklenen bir cila değildir.

Config Sync Sistemi

Drupal'ın config sync yaklaşımı, Symfony TreeBuilder ile birleştirildi. Roller ve yetenek matrisleri YAML dosyalarında tutulur, Git ile taşınır. Kullanıcı verileri ise veritabanında kalır.

Modüler Bundle Mimarisi

Her modül bağımsız bir Symfony Bundle olarak çalışır. Kendi routes, services, templates ve migrations dosyalarına sahiptir. Modules\\ namespace'i ile tam izolasyon.

Zero Node.js Politikası

Geliştirici ve admin panelinde AssetMapper + Standalone Tailwind CSS kullanılır. Node.js bağımlılığı sıfır. Derleme adımı yok, doğrudan geliştirme — doğrudan deploy.

Kanıtlanmış Temeller Üzerine İnşa

PHP 8.2+

Çekirdek Dil

Symfony 7.4 LTS

Framework Temeli

Doctrine ORM

Veritabanı Katmanı

AssetMapper

Frontend Varlıkları

Tailwind CSS

Standalone Binary

İki Sınıf Varlık: Content vs Business

CPalius sadece bir CMS değildir; arkasında Oto Galeri, Turizm Acentası, Personel Yönetimi veya CRM/ERP sistemlerinin çalışabileceği esnek bir uygulama platformudur.

Özellik Content Entities (Node) Business Records (Resource)
Kavramsal Karşılık Sayfa, Yazı, İlan Vitrini, Blog Araç, Fatura, Rezervasyon, Personel
Slug Var — SEO dostu URL üretimi Yok — İç yönetim kaydı
Çoklu Dil Var — translation_group_id ile Yok — Tek dilli kayıt
Yayın Durumu Var — draft / published / archived Yok — Durum makinesi (workflow)
SEO Var — Meta bilgileri JSON data içinde Yok — Herkese açık değil
Ortak Payda Aynı Capability modeli, aynı Twig bileşenleri, aynı CLI yönetimi, aynı Config Sync

#[CpResource] Devrimi

Geliştiricinin iş süreçlerini kodlamasını saniyeler seviyesine indirmek için özel bir PHP Attribute yapısı tasarlandı. Tek bir anotasyon ile veritabanındaki ham bir Doctrine sınıfını platformun tüm güçleriyle birleştiriyoruz.

Bu tek nitelik sayesinde:

  • Rol ve yetenek matrisine dinamik yetenekler otomatik kaydolur
  • Otomatik CRUD formları ve liste ekranları dinamik türetilir
  • SaaS çoklu kiracı izolasyonu otomatik uygulanır
  • Tüm değişiklikler sürüm geçmişine (audit log) kaydedilir
Örnek: Vehicle Entity
#[CpResource(
    name: 'vehicle',
    module: 'oto-galeri',
    capabilities: [
        'create','edit',
        'delete','view'
    ],
    auditable: true,
    multiTenant: true,
    workflow: 'vehicle_lifecycle'
)]
#[ORM\Entity]
class Vehicle
{
    private ?int $id;
    private ?string $plate;
    private ?string $brand;
    private ?int $price;
}

Güvenlik ve Performans Anayasası

Güvenlik ve performans, projenin son aşamasında "üzerine eklenen" bir cila değildir; sistemin en temel yapı taşlarıdır.

Yetenek Tabanlı Erişim Kontrolü (CBAC)

Standart ROLE_ADMIN yaklaşımı yerine dinamik olarak üretilen yetenekler kontrol edilir. Kodun hiçbir yerinde rol ismi kontrol edilmez.

denyAccessUnlessGranted('system.module.manage')

Roller = Config (YAML): Git ile taşınır.
Kullanıcılar = Content (DB): Asla dışa aktarılmaz.

SaaS Tenant Sızıntı Koruması

Çok kiracılı (SaaS) sistemlerde en büyük güvenlik açığı: yazılımcının WHERE tenant_id = ? yazmayı unutması.

CPalius'ta bu ihtimal platform seviyesinde yok edilmiştir. Doctrine SQLFilter otomatik olarak her sorguya tenant kısıtını enjekte eder. Geliştiricinin müdahalesine gerek kalmaz.

N+1 Sorgu Muhafızı

Veritabanı yavaşlıklarının en yaygın sebebi olan N+1 sorgu hatalarını engelleyen Doctrine Listener. Dev ortamında tetiklenir.

Tek HTTP isteğinde aynı tabloya atılan sorgu sayısı limiti aşarsa MaxQueriesExceededException fırlatılır. Geliştirici bu hatayı lokalde çözmeden kodu canlıya alamaz.

0
Savunma Hattı
0
N+1 Sorgu Toleransı
Modül Kapasitesi
0
Açık Kaynak

Gelecek Yol Haritası

Çekirdek güvenlik, performans ve mimari omurga tamamlandı. Sıradaki geliştirme sprintlerinde aşağıdaki sistemler inşa edilecek.

Sprint 1

Safe Mode & Kurtarma Konsolu

cp-content altındaki tüm modüller çöktüğünde bile ayakta kalabilen, bağımsız varlıkları olan ve sistem yöneticisinin bozuk modülleri kapatmasını sağlayan izole web konsolu.

Sprint 2

Workflow & State Machine

Fatura, araç, rezervasyon gibi iş kayıtlarının geçiş süreçlerini (draft → preparation → sold) YAML tanımlarıyla yöneten ve her geçişi otomatik audit log'a bağlayan mekanizma.

Sprint 3

Asset Sistemi

Pimcore tarzı bağımsız medya kütüphanesi. Flysystem (S3, MinIO) ve LiipImagineBundle entegrasyonu ile URL üzerinden anlık görsel türetme sunan modern dosya yönetimi.

Mimariyi Birlikte Kusursuzlaştıralım

CPalius, topluluğun gücüyle en sağlam uygulama framework'üne dönüşecek. Fikirlerinizi, eleştirilerinizi ve mimari önerilerinizi heyecanla bekliyoruz.