CodeBlanks Logo Icon CodeBlanks

Request/Response döngüsü

PHP kursu · İleri seviye · Ders 68/92

Middleware'lerin istek ve yanıt arasında nasıl zincirlendiğini öğrenirsin.

İstek/yanıt döngüsü

Bir middleware zincirinde istek dıştan içe, yanıt içten dışa akar. Buna onion model denir. En dıştaki middleware önce çalışmaya başlar, en içteki işleyici yanıtı üretir, sonra her middleware kaldığı yerden devam eder.

Her middleware $next($request) çağrısından önce before kısmını, çağrıdan sonra after kısmını işler. $next çağrılmazsa iç katmanlar hiç çalışmaz; bu, erken dönüş (early return) için kullanışlıdır.

Sıralama önemlidir: dış katmandaki middleware önce before, en son after çalıştırır. İç katman ise iki uçta sıkışır.

Yanıtı değiştirme

$next($request) çağrısı bir $response döndürür. Bu yanıtı olduğu gibi döndürebilir ya da değiştirip döndürebilirsin. Örneğin sonuna başlık ekleyebilir, içeriği süzebilir veya tamamen yeni bir yanıt üretebilirsin.

Yaygın bir desen: $response = $next($request); return $response . " [eklendi]";. Bu, her yanıtı otomatik olarak işaretler.

Auth gibi durumlarda $next'i hiç çağırmadan doğrudan yanıt döndürebilirsin; böylece iç katmanlar atlanır.

Uygulama Yanıtı değiştiren middleware yaz

Bir responseModifier($request, $next) fonksiyonu tanımla. Önce echo "before" yaz, sonra $next($request) çağrısının yanıtını al, echo "after" yaz. Yanıtın sonuna " [modified]" ekleyip döndür. $handler "merhaba" döner. Son olarak responseModifier("istek", $handler) çağrısının döndürdüğü yanıtı yazdır.

Örnek çözümü göster
function responseModifier($request, $next) { echo "before\n"; $response = $next($request); echo "after\n"; return $response . " [modified]"; } yaz. Sonra echo responseModifier("istek", $handler) . "\n"; çağır.
Örnek çözüm:
<?php
function responseModifier($request, $next) {
    echo "before\n";
    $response = $next($request);
    echo "after\n";
    return $response . " [modified]";
}
$handler = function ($request) {
    return "merhaba";
};
echo responseModifier("istek", $handler) . "\n";

Kendini test et

  1. Döngü kavramlarını eşleştir

    request
    İçe doğru akar
    response
    Dışa doğru akar
    $next
    Bir sonraki katmana geçer
    onion model
    Katmanlı işleme
  2. Bir middleware $next'ten dönen yanıtı ne yapabilir?

    • Değiştirip geri döndürebilir
    • Yok sayıp yeni istek açabilir
    • Silebilir
    • Yalnızca loglayabilir
    Cevabı göster

    Değiştirip geri döndürebilir — Doğru. $next'in döndürdüğü yanıtı alıp değiştirebilir ve döndürebilirsin.

  3. $response döndür

        $response = $next($request);
        return ____;
    Cevabı göster
        $response = $next($request);
        return $response;

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