CodeBlanks Logo Icon CodeBlanks

CRUD endpoint'leri

PHP kursu · İleri seviye · Ders 57/92

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

  1. HTTP yöntemlerini eşleştir

    GET
    Kaynak listele
    POST
    Yeni kaynak oluştur
    PUT
    Kaynağı güncelle
    DELETE
    Kaynağı sil
  2. 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.

  3. 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"])(); }

İleri seviye bölümündeki tüm dersler