PHP Routing Mantığı: Frameworksüz Mini Router Geliştirme
PHP ile web uygulamaları geliştirirken, kullanıcıların isteklerini doğru sayfalara yönlendirmek esastır. Bu yönlendirme işlemine routing denir. Genellikle framework'ler bu işi kolaylaştırır, ancak bu yazıda, framework kullanmadan, sıfırdan bir mini router geliştirerek PHP routing mantığını derinlemesine inceleyeceğiz. Amacımız, işin arka planında neler döndüğünü anlamak ve daha sonra framework'lerin sunduğu kolaylıkların değerini daha iyi kavramaktır.
Routing Nedir ve Neden Önemlidir?
Routing, gelen URL'leri (örneğin, `https://example.com/urunler/detay/123`) belirli PHP dosyalarına veya fonksiyonlara eşleme işlemidir. İyi bir routing sistemi, uygulamanızın düzenli, yönetilebilir ve SEO dostu olmasını sağlar. Örneğin, `index.php?sayfa=urunler&id=123` yerine `urunler/detay/123` şeklinde daha anlamlı URL'ler kullanabiliriz.
Mini Router Geliştirme Adımları
Şimdi adım adım basit bir router geliştirelim:
- .htaccess Dosyası (Apache İçin): Öncelikle, tüm istekleri `index.php` dosyasına yönlendirmemiz gerekiyor. Bunun için `.htaccess` dosyasına aşağıdaki satırları ekleyin:
-
RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?url=$1 [L,QSA] - index.php Dosyası: Tüm istekler artık `index.php`'ye geliyor. Bu dosyada, `$_GET['url']` parametresini alıp, hangi sayfayı göstereceğimize karar vereceğiz.
-
<?php $url = isset($_GET['url']) ? $_GET['url'] : ''; $routes = [ '/' => 'controllers/anasayfa.php', 'urunler' => 'controllers/urunler.php', 'urunler/detay/([0-9]+)' => 'controllers/urun_detay.php?id=$1', ]; $found = false; foreach ($routes as $route => $file) { $pattern = '#^' . $route . '$#'; if (preg_match($pattern, $url, $matches)) { $found = true; include $file; break; } } if (!$found) { include 'controllers/404.php'; } - controllers Klasörü ve Dosyaları: `controllers` klasöründe, `anasayfa.php`, `urunler.php`, `urun_detay.php` ve `404.php` gibi dosyalar oluşturun. Bu dosyalar, ilgili sayfaların içeriğini gösterecek.
Kodun Açıklaması
- `.htaccess` dosyası, gelen tüm istekleri `index.php`'ye yönlendirir. `RewriteCond` satırları, dosya veya dizin varsa yönlendirme yapmamasını sağlar.
- `index.php` dosyası, `$_GET['url']` parametresini alır ve tanımlanmış `routes` dizisi içinde eşleşme arar.
- `routes` dizisi, URL'leri hangi dosyalara yönlendireceğini belirtir. Düzenli ifadeler (regular expressions) kullanılarak daha karmaşık URL eşleştirmeleri yapılabilir. Örneğin, `urunler/detay/([0-9]+)` ifadesi, `urunler/detay/` ile başlayan ve ardından bir veya daha fazla rakam içeren URL'leri yakalar. Parantez içindeki `([0-9]+)` ifadesi, rakamları `$matches` dizisine kaydeder.
- `preg_match` fonksiyonu, URL ile `routes` dizisindeki desenleri karşılaştırır. Eşleşme bulunursa, ilgili dosya `include` edilir.
- Eşleşme bulunamazsa, `404.php` dosyası `include` edilir.
Gelişmiş Routing Özellikleri
Bu mini router, temel routing işlevlerini yerine getirir, ancak daha gelişmiş özellikler de eklenebilir:
- Parametre Yakalama: Düzenli ifadelerle URL'lerden parametreleri yakalayıp, ilgili dosyalara gönderebilirsiniz.
- HTTP Metodlarına Göre Routing: Farklı HTTP metodlarına (GET, POST, PUT, DELETE) göre farklı routing kuralları tanımlayabilirsiniz.
- Middleware: Routing işleminden önce veya sonra çalışacak middleware'ler tanımlayabilirsiniz. Örneğin, kullanıcı yetkilendirme kontrolü yapan bir middleware ekleyebilirsiniz.
- Özel Hata Sayfaları: 404 gibi hatalar için özelleştirilmiş hata sayfaları oluşturabilirsiniz.
AyLabs Yazılım & Teknoloji ve Routing Çözümleri
AyLabs Yazılım & Teknoloji olarak, web uygulamaları geliştirme konusunda uzmanız ve müşterilerimize en iyi routing çözümlerini sunuyoruz. İster framework kullanın, ister kendi routing sisteminizi geliştirin, doğru routing stratejisi, uygulamanızın başarısı için kritik öneme sahiptir. Kompleks web projelerinizde size özel çözümlerimizle destek olmaktan mutluluk duyarız. Routing mantığını anlamak ve doğru uygulamak, ölçeklenebilir ve sürdürülebilir web uygulamaları geliştirmenin temelidir.
Sonuç
Bu yazıda, PHP'de framework kullanmadan, sıfırdan bir mini router geliştirerek routing mantığını anlamaya çalıştık. Bu bilgiler, framework'lerin sunduğu routing sistemlerini daha iyi anlamanıza ve kendi ihtiyaçlarınıza göre özelleştirmenize yardımcı olacaktır. Unutmayın, routing sadece URL'leri sayfalara yönlendirmekle kalmaz, uygulamanızın mimarisini ve kullanıcı deneyimini de şekillendirir.