CRUD endpoint'leri
GET, POST, PUT ve DELETE endpoint'lerini PDO ile bağlarsın.
dispatch yöntemi
dispatch yöntemi gelen isteği alır ve kayıtlı rotalar arasında eşleşme arar. İmzası dispatch(string $method, string $path) şeklindedir. foreach ile $this->routes dizisini dolaşır; her rotanın method ve path alanlarını gelen değerlerle karşılaştırırsın.
Eşleşme bulunursa işleyiciyi çağırır ve dönüş değerini döndürürsün: return ($route['handler'])();. Bulunmazsa bir hata yanıtı döndürürsün.
İşleyiciyi çağırmak
Bir closure ya da fonksiyon adını çağırmanın PHP'deki yolu ($handler)() sözdizimidir. Eğer $handler bir closure ise doğrudan çağrılır; bir dize ise aynı addaki fonksiyon çağrılır.
Bu esneklik sayesinde hem anonim fonksiyonlar hem de "handleGet" gibi adlar aynı dispatch mantığıyla çalışır. Böylece işleyici türü dispatch'i karmaşıklaştırmaz.
Uygulama dispatch yöntemini ekle
Router sınıfına dispatch yöntemini ekle. İmzası public function dispatch(string $method, string $path) olsun. Yöntem foreach ile $this->routes dizisini dolaşsın; her rotanın method ve path alanlarını gelen değerlerle strict === ile karşılaştırsın. Eşleşme bulunursa return ($route['handler'])(); ile işleyiciyi çağırıp sonucunu döndürsün. Bulunmazsa return "404 Bulunamadı"; döndürsün.
Örnek çözümü göster
public function dispatch(string $method, string $path) imzasını yaz. foreach ($this->routes as $route) ile dolaş; if ($route["method"] === $method && $route["path"] === $path) ile karşılaştır. Eşleşirse return ($route["handler"])(); döndür; yoksa return "404 Bulunamadı";.
Örnek çözüm:
<?php
// REST API projesi: Router + addRoute + dispatch
class Router {
public array $routes = [];
public function addRoute(string $method, string $path, $handler): void {
$this->routes[] = ["method" => $method, "path" => $path, "handler" => $handler];
}
public function dispatch(string $method, string $path) {
foreach ($this->routes as $route) {
if ($route["method"] === $method && $route["path"] === $path) {
return ($route["handler"])();
}
}
return "404 Bulunamadı";
}
}
// Demo:
$router = new Router();
$router->addRoute("GET", "/tasks", function() { return "Görev listesi"; });
echo $router->dispatch("GET", "/tasks");
Kendini test et
-
HTTP yöntemlerini eşleştir
- GET
- Kaynak listele
- POST
- Yeni kaynak oluştur
- PUT
- Kaynağı güncelle
- DELETE
- Kaynağı sil
-
dispatch yöntemi eşleşen rotayı bulamazsa ne döndürmeli?
- Boş bir dize
- 404 hata yanıtı
- 200 başarı yanıtı
- Boş bir dizi
Cevabı göster
404 hata yanıtı — Doğru. Eşleşme yoksa kaynak bulunamadı demektir; 404 döndürülür.
-
Eşleşme koşulunu tamamla
if ($route["method"] === $method && ____) { return ($route["handler"])(); }Cevabı göster
if ($route["method"] === $method && $route["path"] === $path) { return ($route["handler"])(); }