QTR Framework
Nasıl Kullanılır?
Kurulumdan deploy'a tek bir rehber. Hızlı başlangıç bloğunu geçtikten sonra her bölümü istediğin sırada okuyabilirsin.
Hızlı Başlangıç 5 dakika
~5 dkAşağıdaki komutları sırayla çalıştırarak QTR Framework'ü kurun ve ilk projenizi ayağa kaldırın. Her adım bağımsız olarak da test edilebilir.
CLI'ı Kurun
npm install -g speaker-quarter-cli
Proje Oluşturun
qtr create benim-projem
cd benim-projem
Ortamı Yapılandırın
qtr env:setup
qtr env:set DB_NAME benim_projem_db
qtr env:set DB_USER root
qtr env:check
Migration Çalıştırın
qtr db:run
Sunucuyu Başlatın
qtr serve
1. Kurulum
~2 dkQTR Framework için harici bir paket yöneticisi ya da bağımlılık gerekmez. Tek koşul: PHP 8.0+.
Gereksinimler
- PHP 8.0 veya üzeri (
php -vile kontrol edin) - MySQL 5.7+ / MariaDB 10.4+ (Opsiyonel — DB kullanacaksanız)
- Composer gerekmez
- Node.js gerekmez
SpeakerQuarter CLI'ı Kurun
QTR CLI (qtr) projelerinizi yönetir. Node.js ile dağıtılır:
npm install -g speaker-quarter-cli
qtr --version
2. İlk Proje
~3 dkProje oluşturmak için qtr create komutunu kullanın. Komut, etkileşimli olarak PHP binary yolu ve memory-bank şablonunu sorar.
qtr create benim-projem
cd benim-projem
qtr serve
Klasör Yapısı
benim-projem/ ├── pages/ ← Sayfa kontrolcüleri ├── resources/ │ └── views/ ← HTML şablonlar ├── routes/ │ ├── web.php ← Sayfa route'ları │ └── api.php ← API route'ları ├── app/ │ └── core/ ← Framework çekirdeği ├── public/ ← Web kökü (index.php, assets) └── .env ← Ortam değişkenleri
Sunucu: qtr serve --port=3000 ile farklı port kullanabilirsiniz. qtr serve --stop ile durdurulur.
3. Route Ekleme
~2 dkQTR Framework'te her URL bir pages/ dosyasına karşılık gelir. Yeni bir sayfa eklemek için:
# Sayfa oluştur
qtr route:create blog
# Mevcut route'ları listele
qtr route:list
Komut, pages/blog.php dosyasını ve routes/web.php'e route satırını otomatik ekler. Ardından view dosyasını oluşturun:
<?php
require_once QTR_ROOT . '/app/core/View.php';
View::render('blog/index', [
'title' => 'Blog — Benim Projem',
]);
URL yapısı: /blog → pages/blog.php | /blog/detail → pages/blog.php (kısımlar $parts değişkeniyle erişilir)
4. Veritabanı
~3 dkQTR Framework migration için numaralı SQL dosyaları kullanır. Migration sistemi idempotent'tir; aynı dosyayı iki kez çalıştırmaz.
# Yeni migration dosyası oluştur
qtr db:create users
# Mevcut dosyaları listele
qtr db:list
# Migration'ları çalıştır
qtr db:run
Model Kullanımı
<?php
require_once QTR_ROOT . '/app/models/BaseModel.php';
class UserModel extends BaseModel
{
protected static string $table = 'users';
public static function findActive(): array
{
$pdo = self::getConnection();
$stmt = $pdo->query("SELECT * FROM users WHERE is_active = 1");
return $stmt->fetchAll();
}
}
Zorla çalıştırma: qtr db:run --force daha önce çalıştırılmış dosyaları da yeniden uygular. Dikkatli kullanın.
5. Admin Paneli
~2 dkQTR Framework yerleşik bir yönetici paneliyle gelir. Etkileşimli kurulum sihirbazı ilk admin kullanıcısını ve rol yapısını otomatik oluşturur.
qtr admin:install
Kurulumdan sonra /admin adresine giderek giriş yapabilirsiniz. Admin paneli;
- Rol tabanlı erişim kontrolü (RBAC)
- Log görüntüleyici
- Kullanıcı yönetimi
- Dashboard & istatistikler
6. API Üretimi
~3 dkTek komutla 5 CRUD endpoint'i (index, show, create, update, delete) oluşturabilirsiniz:
qtr api:crud Product
qtr api:list
Oluşturulan dosyalar:
app/api/ ├── controllers/ProductController.php ├── services/ProductService.php └── validators/ProductValidator.php
Middleware Ekleme
$router->get('/api/products', 'ProductController@index')
->middleware('auth', 'rate-limit:60');
Dokümantasyon: qtr api:docs ile OpenAPI JSON ve Markdown belgesi üretin.
7. Güvenlik
~2 dkQTR Framework'ün 7 katmanlı güvenlik mimarisi varsayılan olarak etkindir. strict mod ek güvenlik başlıkları ekler:
qtr security:mode strict
Her form POST isteği için tek kullanımlık token doğrulaması.
Tüm çıktılar htmlspecialchars + XssHelper filtresiyle geçer.
PDO Prepared Statements zorunlu — raw query yasak.
Middleware katmanında IP+endpoint bazlı istek sınırlama.
Oturum sabit alma, token rotasyonu, HttpOnly cookie.
CSP, X-Frame-Options, Referrer-Policy, HSTS (strict modda).
Production'da stack trace gizlenir, loglanır.
8. Deploy
~3 dkProduction'a geçmeden önce deploy kontrol listesini çalıştırın:
qtr deploy:check
Apache / Nginx Yapılandırması
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]
- Web kökü olarak
public/klasörünü gösterin -
.envdosyasına web erişimini engelleyin -
storage/logs/klasörünü yedekleyin - PHP
display_errors=Offayarlayın
Hâlâ sorun mu var?
Dokümantasyon yetersiz kaldıysa iletişim sayfasından bize ulaşın ya da GitHub Issues üzerinden açık sorun bildirin.