Request/Response döngüsü
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
-
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
-
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.
-
$response döndür
$response = $next($request); return ____;Cevabı göster
$response = $next($request); return $response;