Takip et

Fat-Free Framework Nedir?

PHP ekosisteminde birçok farklı framework bulunmaktadır ve her biri belirli ihtiyaçlara yönelik çözümler sunar. Bu çeşitlilik içinde, haf

PHP ekosisteminde birçok farklı framework bulunmaktadır ve her biri belirli ihtiyaçlara yönelik çözümler sunar. Bu çeşitlilik içinde, hafifliği, hızı ve kullanım kolaylığı ile öne çıkan bir seçenek de Fat-Free Framework (F3) olarak karşımıza çıkar. Bu rehberde, F3’ü nasıl kullanacağınızı, temel özelliklerini ve pratik uygulamalarını adım adım inceleyeceğiz.


Fat-Free Framework Nedir?

Fat-Free Framework, kısaca F3, PHP için tasarlanmış, açık kaynaklı, hafif ve yüksek performanslı bir web uygulama çatısıdır. “Fat-Free” (yağsız) ismi, framework’ün minimalist yaklaşımını ve düşük kaynak tüketimini vurgular. Diğer bazı büyük framework’lerin aksine, F3 sadece birkaç dosyadan oluşur ve projenize dahil etmesi son derece kolaydır.

F3’ün temel felsefesi, geliştiricilere mümkün olduğunca fazla esneklik sunarken, aynı zamanda hızlı prototipleme ve sağlam uygulamalar geliştirmek için gerekli araçları sağlamaktır. MVC (Model-View-Controller) prensiplerini desteklese de, sizi katı bir yapıya zorlamaz; bu da onu küçük ve orta ölçekli projeler, API’ler veya hızlı çözümler için ideal kılar. Dahili URL yönlendirme, veritabanı soyutlama katmanları, şablon motoru, oturum yönetimi ve önbellekleme gibi birçok temel bileşeni bünyesinde barındırır.

Eğer projeniz için yüksek öğrenme eğrisi olmayan, hızlıca ayağa kaldırabileceğiniz ve performanstan ödün vermeyen bir çözüm arıyorsanız, Fat-Free Framework kesinlikle göz önünde bulundurmanız gereken bir seçenektir.


Kurulum ve İlk Adımlar

Fat-Free Framework’ü kullanmaya başlamak oldukça basittir. Geleneksel Composer tabanlı kurulumun yanı sıra, framework dosyalarını doğrudan indirip projenize dahil etme esnekliği de sunar.

Composer ile Kurulum

Modern PHP projelerinde Composer kullanmak en yaygın ve önerilen yöntemdir. Projenizin kök dizininde aşağıdaki komutu çalıştırın:

composer require bcosca/fatfree-core

Bu komut, F3’ü projenize dahil edecek ve vendor dizini altında gerekli dosyaları oluşturacaktır.

Manuel Kurulum (Alternatif)

Eğer Composer kullanmak istemiyorsanız, F3’ün resmi web sitesinden (fatfreeframework.com) en son sürümü indirip, zip dosyasını projenizin istediğiniz bir dizinine (örneğin lib veya vendor) açmanız yeterlidir.

İlk Uygulama: “Merhaba Dünya!”

Kurulum tamamlandıktan sonra, basit bir “Merhaba Dünya!” uygulaması ile F3’ün nasıl çalıştığını görelim. Genellikle, tüm istekleri yönlendirecek tek bir ana giriş dosyası (index.php) bulunur.

Projenizin kök dizininde index.php adında bir dosya oluşturun ve içine aşağıdaki kodu ekleyin:

set('DEBUG', 3);

// Bir GET isteği için rota tanımla
$f3->route('GET /', function() {
    echo 'Merhaba Dünya!';
});

// Uygulamayı çalıştır
$f3->run();

?>

Bu kod parçası:

  1. F3’ün ana sınıfını (Base.php) yükler (Composer ile veya manuel olarak).
  2. F3’ün bir örneğini oluşturur.
  3. Hata ayıklama seviyesini ayarlar.
  4. / URL’sine gelen GET istekleri için bir rota tanımlar. Bu rota, basitçe “Merhaba Dünya!” metnini ekrana basar.
  5. Uygulamayı başlatır ve tanımlanan rotaları işler.

URL Yönlendirme için .htaccess

Sunucunuzun tüm istekleri index.php dosyasına yönlendirmesi için Apache sunucularında .htaccess dosyasına ihtiyacınız olacaktır. Projenizin kök dizininde .htaccess adında bir dosya oluşturun ve içine aşağıdaki kodu ekleyin:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]

Bu yapılandırma, var olmayan dosya veya dizin isteklerini index.php‘ye yönlendirir, böylece F3 rotalama mekanizması devreye girer. Artık tarayıcınızdan projenizin URL’sine gittiğinizde “Merhaba Dünya!” çıktısını görmelisiniz.


Temel Özellikler ve Kullanım

Fat-Free Framework’ün gücü, sunduğu basit ama etkili temel özelliklerde yatar. Bu bölümde, en sık kullanacağınız F3 bileşenlerine yakından bakacağız.

1. Yönlendirme (Routing)

F3’ün temelinde güçlü ve esnek bir yönlendirme sistemi bulunur. HTTP metotlarına (GET, POST, PUT, DELETE vb.) göre veya URL desenlerine göre rotalar tanımlayabilirsiniz.

// Basit bir GET rotası
$f3->route('GET /hakkimizda', function() {
    echo 'Bu bizim hakkımızda sayfamız.';
});

// Dinamik parametreli rota
$f3->route('GET /kullanici/@id', function($f3, $params) {
    echo 'Kullanıcı ID: ' . $params['id'];
});

// Çoklu HTTP metotları için rota
$f3->route('GET|POST /iletisim', function($f3) {
    if ($f3->get('VERB') == 'GET') {
        echo 'İletişim formunu göster.';
    } else {
        echo 'İletişim formunu işle.';
        // Form verilerine $f3->get('POST.alan_adi') ile erişilebilir.
    }
});

// Rota takma adı (aliasing)
$f3->route('GET @ana_sayfa: /', function() {
    echo 'Ana Sayfa';
});
// Başka bir yerden yönlendirme: $f3->reroute('@ana_sayfa');

2. Değişken Yönetimi

F3, uygulamanız genelinde değişkenleri ayarlamak ve almak için basit bir mekanizma sunar. Bu, yapılandırma ayarları, oturum verileri veya geçici bilgileri depolamak için kullanışlıdır.

// Değişken ayarla
$f3->set('site_adi', 'Benim F3 Sitem');
$f3->set('veritabani.host', 'localhost');
$f3->set('kullanici.adi', 'Ahmet');
$f3->set('kullanici.email', 'ahmet@example.com');

// Değişkeni al
echo $f3->get('site_adi'); // Çıktı: Benim F3 Sitem
echo $f3->get('veritabani.host'); // Çıktı: localhost

// Tüm kullanıcı bilgilerini al (dizi olarak)
$kullanici = $f3->get('kullanici');
print_r($kullanici); 
/* Çıktı:
Array
(
    [adi] => Ahmet
    [email] => ahmet@example.com
)
*/

3. Şablon Motoru (Templating)

F3’ün dahili şablon motoru, HTML kodunuzu PHP mantığından ayırmanıza yardımcı olur. Bu, daha temiz ve sürdürülebilir bir kod yapısı sağlar.

Önce templates adında bir dizin oluşturun ve içine anasayfa.html adında bir dosya ekleyin:





    
    {{ @site_adi }}


    

Hoş Geldiniz, {{ @kullanici_adi }}!

Bugünün tarihi: {{ date('Y-m-d') }}

Şimdi index.php dosyanızda bu şablonu nasıl kullanacağınızı görelim:

// index.php içinde
$f3->set('site_adi', 'F3 Uygulamam');
$f3->set('kullanici_adi', 'Ziyaretçi');

// Şablon dizinini ayarla
$f3->set('UI', 'templates/');

$f3->route('GET /', function($f3) {
    echo \Template::instance()->render('anasayfa.html');
});

{{ @degisken_adi }} syntax’ı ile F3 değişkenlerine erişebilir, ayrıca basit PHP fonksiyonlarını da doğrudan şablon içinde kullanabilirsiniz.

4. Veritabanı Entegrasyonu

F3, SQL (MySQL, PostgreSQL, SQLite, MS-SQL vb.) ve NoSQL (MongoDB, Redis, Apache Cassandra) veritabanları için soyutlama katmanları sunar. En yaygın olanı DB\SQL ile bir MySQL veritabanına bağlanmayı inceleyelim.

// index.php içinde
$f3->set('DB', [
    'dsn' => 'mysql:host=localhost;port=3306;dbname=test_db',
    'username' => 'root',
    'password' => 'your_password'
]);

$f3->route('GET /urunler', function($f3) {
    // Veritabanı bağlantısı oluştur
    $db = new \DB\SQL($f3->get('DB.dsn'), $f3->get('DB.username'), $f3->get('DB.password'));

    // Bir sorgu çalıştır
    $urunler = $db->exec('SELECT id, ad, fiyat FROM urunler');

    // Sonuçları ekrana bas
    echo '

Ürünler

'; echo '
    '; foreach ($urunler as $urun) { echo '
  • ' . $urun['ad'] . ' - ' . $urun['fiyat'] . ' TL
  • '; } echo '
'; });

DB\SQL sınıfını kullanarak PDO tabanlı veritabanı işlemlerini kolayca gerçekleştirebilirsiniz. Ayrıca, F3’ün ORM benzeri bir yaklaşım sunan DB\SQL\Mapper sınıfı ile nesne tabanlı veritabanı işlemleri de yapabilirsiniz.

5. Oturum (Session) Yönetimi

F3, oturumları yönetmek için basit bir arayüz sağlar. Varsayılan olarak PHP’nin yerleşik oturumlarını kullanır, ancak veritabanı veya Redis gibi farklı depolama seçenekleriyle de yapılandırılabilir.

// index.php içinde
// Oturumu başlat
$f3->set('AUTOLOAD', 'app/'); // Oturum sınıfı app/Session.php içinde olabilir
$f3->set('SESSION.handler', 'Session'); // Varsayılanı kullanıyorsanız bu satıra gerek yok

// Bir rotada oturum verisi ayarla
$f3->route('GET /login', function($f3) {
    $f3->set('SESSION.kullanici_id', 123);
    $f3->set('SESSION.kullanici_adi', 'Deniz');
    echo 'Giriş yapıldı. Oturum verileri ayarlandı.';
});

// Başka bir rotada oturum verisine eriş
$f3->route('GET /profil', function($f3) {
    if ($f3->exists('SESSION.kullanici_id')) {
        echo 'Hoş geldin, ' . $f3->get('SESSION.kullanici_adi') . '! ID: ' . $f3->get('SESSION.kullanici_id');
    } else {
        echo 'Lütfen giriş yapın.';
    }
});

// Oturumu kapat
$f3->route('GET /logout', function($f3) {
    $f3->clear('SESSION'); // Tüm oturum verilerini sil
    echo 'Çıkış yapıldı.';
});

6. Hata Yönetimi

F3, hata ve istisna yönetimini kolaylaştırmak için basit bir mekanizma sunar. DEBUG seviyesini ayarlayarak hata mesajlarının nasıl gösterileceğini kontrol edebilirsiniz.

// index.php içinde
// Hata ayıklama seviyesi:
// 0: Hata raporlama kapalı (üretim için)
// 1: Minimal hata raporlama
// 2: Detaylı hata raporlama
// 3: Geliştirme için en detaylı raporlama
$f3->set('DEBUG', 3); 

// Özel bir hata sayfası tanımlama
$f3->set('ONERROR', function($f3) {
    // HTTP durum kodunu al
    $kod = $f3->get('ERROR.code');
    
    // Hata mesajını al
    $mesaj = $f3->get('ERROR.text');

    // Özel bir şablon render et
    echo \Template::instance()->render('hata.html');

    // Örnek: Hata detaylarını logla
    error_log("Hata Kodu: $kod, Mesaj: $mesaj");
});

hata.html şablonunda {{ @ERROR.code }} ve {{ @ERROR.text }} gibi değişkenleri kullanarak hata bilgilerini gösterebilirsiniz.


İleri Seviye Kullanım ve En İyi Pratikler

F3’ün temel özelliklerini öğrendikten sonra, daha karmaşık uygulamalar geliştirmek için bazı ileri seviye konulara ve en iyi pratiklere göz atalım.

1. Uygulama Yapılandırması (Configuration)

Uygulama ayarlarınızı (veritabanı bilgileri, API anahtarları vb.) ayrı bir dosyada tutmak iyi bir pratiktir. F3, config() metodunu kullanarak INI dosyalarından yapılandırma yüklemeyi destekler.

Projenizin kök dizininde config.ini adında bir dosya oluşturun:


[globals]
DEBUG=3
UI=templates/
AUTOLOAD=app/

[database]
DB_DSN="mysql:host=localhost;port=3306;dbname=my_app_db"
DB_USERNAME="root"
DB_PASSWORD="your_password"

[app]
APP_NAME="Benim Harika Uygulamam"
API_KEY="supersecretkey"

Şimdi index.php dosyanızda bu ayarları yükleyebilirsiniz:

// index.php içinde
$f3 = \Base::instance();

// config.ini dosyasını yükle
$f3->config('config.ini');

// Ayarlara erişim
echo $f3->get('APP_NAME'); // Çıktı: Benim Harika Uygulamam
echo $f3->get('DB_DSN'); // Çıktı: mysql:host=localhost;port=3306;dbname=my_app_db

Bu yöntem, farklı ortamlar (geliştirme, test, üretim) için farklı yapılandırma dosyaları kullanmanıza olanak tanır.

2. Proje Yapısı Önerileri

F3 sizi katı bir yapıya zorlamasa da, büyük projelerde düzenli bir yapılandırma sürdürülebilirliği artırır. İşte örnek bir yapı:


/
├── index.php         (Ana giriş dosyası)
├── .htaccess         (URL yönlendirme)
├── config.ini        (Uygulama ayarları)
├── templates/        (HTML şablonları)
│   ├── layout.html
│   ├── home.html
│   └── error.html
├── app/              (Uygulama mantığı)
│   ├── controllers/  (Kontrolcü sınıfları)
│   │   ├── HomeController.php
│   │   └── UserController.php
│   ├── models/       (Model sınıfları, veritabanı etkileşimleri)
│   │   ├── User.php
│   │   └── Product.php
│   └── services/     (Yardımcı sınıflar, iş mantığı)
│       └── AuthService.php
├── public/           (Herkese açık dosyalar: CSS, JS, resimler)
│   ├── css/
│   ├── js/
│   └── img/
└── vendor/           (Composer ile yüklenen kütüphaneler)

Bu yapıda, app/controllers, app/models gibi dizinleri AUTOLOAD ayarına ekleyerek F3’ün bu sınıfları otomatik olarak yüklemesini sağlayabilirsiniz:

$f3->set('AUTOLOAD', 'app/controllers/;app/models/;app/services/');

3. Kontrolcüler (Controllers)

Rotlama mantığınızı fonksiyonlar yerine sınıflara taşımak, kodunuzu daha modüler ve test edilebilir hale getirir. Her sınıf bir veya daha fazla rota için iş mantığını barındırır.

app/controllers/HomeController.php:

set('baslik', 'Ana Sayfa');
        $f3->set('mesaj', 'F3 ile harika şeyler yapın!');
        echo \Template::instance()->render('home.html');
    }

    public function about($f3) {
        echo 'Bu bizim hakkımızda sayfamız.';
    }
}

index.php içinde rotaları bu kontrolcülere yönlendirin:

// index.php içinde
$f3->set('AUTOLOAD', 'app/controllers/'); // Kontrolcüleri otomatik yükle

$f3->route('GET /', '\App\Controllers\HomeController->index');
$f3->route('GET /hakkimizda', '\App\Controllers\HomeController->about');

4. Middleware (Ara Katman Yazılımı)

F3, belirli rotalar çalışmadan önce veya sonra kod çalıştırmanıza olanak tanıyan bir “middleware” benzeri mekanizma sunar. Bu, kimlik doğrulama, yetkilendirme, loglama veya önbellekleme gibi işlemler için kullanışlıdır.

// index.php içinde
// Bir rota çalışmadan önce çalışacak bir middleware tanımla
$f3->route('GET /admin/*', function($f3) {
    // Kullanıcının oturum açıp açmadığını kontrol et
    if (!$f3->exists('SESSION.admin_logged_in')) {
        $f3->reroute('/login'); // Giriş sayfasına yönlendir
    }
});

// Admin rotası
$f3->route('GET /admin/dashboard', function() {
    echo 'Admin Paneli Hoş Geldiniz!';
});

Yukarıdaki örnekte, /admin/ ile başlayan tüm rotalara erişmeden önce kullanıcının oturum açmış olup olmadığı kontrol edilir. Eğer oturum açmamışsa, kullanıcı /login sayfasına yönlendirilir.


Sonuç ve Sıkça Sorulan Sorular (SSS)

Fat-Free Framework, PHP geliştiricileri için minimalist, hızlı ve esnek bir seçenek sunar. Hafif yapısı sayesinde, öğrenme eğrisi düşüktür ve küçükten orta ölçeğe kadar birçok farklı proje türü için idealdir. API geliştirme, hızlı prototipleme veya performansı ön planda tutan uygulamalar için F3, gereksiz karmaşıklıktan kaçınarak temel ihtiyaçları karşılar.

Bu rehberde, F3’ün kurulumundan başlayarak, yönlendirme, değişken yönetimi, şablon motoru, veritabanı entegrasyonu, oturumlar ve hata yönetimi gibi temel özelliklerini ele aldık. Ayrıca, yapılandırma, proje yapısı, kontrolcüler ve middleware gibi ileri seviye konulara değinerek daha düzenli ve ölçeklenebilir uygulamalar geliştirmenize yardımcı olacak pratik bilgiler sunduk. F3’ün sunduğu esneklik ve performans, onu PHP araç kutunuzda değerli bir yere koyar.

Sıkça Sorulan Sorular (SSS)

1. Fat-Free Framework hangi tür projeler için idealdir?
F3, API’ler, mikro servisler, küçük ve orta ölçekli web uygulamaları, hızlı prototipleme projeleri ve performansı yüksek tutulması gereken uygulamalar için oldukça uygundur. Büyük ölçekli, kurumsal düzeyde projeler için daha kapsamlı framework’ler (Laravel, Symfony) daha fazla özellik ve yapı sunabilir, ancak F3 doğru kullanıldığında bu tür projelerde de esneklik sağlayabilir.

2. F3, diğer popüler PHP framework’lerinden (Laravel, Symfony) farkı nedir?
F3, “mikro framework” kategorisine girer. Laravel veya Symfony gibi “full-stack” framework’lere göre çok daha hafiftir, daha az bağımlılığa sahiptir ve daha az “magic” içerir. Bu, daha hızlı yükleme süreleri ve daha düşük kaynak tüketimi anlamına gelir. Ancak, daha az yerleşik özellik (örneğin, tam teşekküllü ORM veya kimlik doğrulama sistemi) sunar, bu da geliştiricinin bazı bileşenleri manuel olarak entegre etmesini gerektirebilir.

3. F3, MVC (Model-View-Controller) yapısını destekler mi?
Evet, F3 MVC prensiplerini destekler ve uygulamanızı bu mimariye göre tasarlamanıza olanak tanır. Ancak, sizi katı bir MVC yapısına zorlamaz. İsterseniz daha basit, tek dosya tabanlı bir yapı da kullanabilirsiniz. Bu esneklik, projenizin ihtiyaçlarına göre karar vermenizi sağlar.

4. Fat-Free Framework’ün performansı nasıl?
Adından da anlaşılacağı gibi, F3 performansa odaklanmıştır. Düşük bellek kullanımı, minimal dosya boyutu ve hızlı yükleme süreleri sunar. Bu, özellikle yüksek trafikli uygulamalar veya kaynakları kısıtlı sunucularda çalışan projeler için önemli bir avantajdır.

5. Öğrenmesi kolay mı?
Evet, F3’ün öğrenme eğrisi oldukça düşüktür. Basit API’si ve iyi belgelendirilmiş yapısı sayesinde, temel PHP bilgisine sahip geliştiriciler kısa sürede F3 ile uygulama geliştirmeye başlayabilirler. Karmaşık konfigürasyonlar veya derinlemesine kavramlar yerine, doğrudan kod yazmaya odaklanabilirsiniz.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Exit mobile version