App\Routing
Request
Immutables HTTP-Request-Objekt. Kapselt alle Informationen des eingehenden Requests: Methode, Pfad, Query-Parameter, Body, Header, Cookies und Route-Attribute.
Die Klasse ist als
final readonly deklariert – alle Properties sind schreibgeschützt und können nach der Konstruktion nicht mehr verändert werden. withAttribute() gibt immer einen neuen Klon zurück.Properties (readonly)
| Property | Typ | Beschreibung |
|---|---|---|
| $method | string | HTTP-Methode in Großbuchstaben: GET, POST, PUT, PATCH, DELETE |
| $path | string | Bereinigter URL-Pfad ohne Query-String, z.B. /users/42 |
| $query | array | Query-Parameter ($_GET) |
| $body | array | POST-Formulardaten ($_POST) |
| $headers | array | HTTP-Header in lowercase (z.B. content-type) |
| $cookies | array | Cookies ($_COOKIE) |
| $server | array | Server-Variablen ($_SERVER) |
Methoden
| Methode | Rückgabetyp | Beschreibung |
|---|---|---|
| withAttribute(string $key, mixed $value) | self | Gibt einen Klon mit zusätzlichem Attribut zurück. Wird intern für Route-Parameter genutzt. |
| getAttribute(string $key, mixed $default = null) | mixed | Liest ein Route-Attribut (z.B. URL-Parameter) aus. |
Verwendung im Controller
PHP
class UserController
{
public function show(Request $request, string $id): Response
{
// Route-Parameter (direkt als Funktionsargument)
$userId = (int) $id;
// Alternativ via getAttribute()
$userId = (int) $request->getAttribute('id');
// Query-String: /users/42?tab=profile
$tab = $request->query['tab'] ?? 'overview';
return Response::json(['id' => $userId, 'tab' => $tab]);
}
public function store(Request $request): Response
{
// POST-Daten
$name = $request->body['name'] ?? '';
$email = $request->body['email'] ?? '';
// Header lesen (lowercase)
$contentType = $request->headers['content-type'] ?? '';
$csrfToken = $request->headers['x-csrf-token'] ?? '';
// Cookies
$sessionId = $request->cookies['PHPSESSID'] ?? '';
return Response::json(['created' => true]);
}
}
// Request manuell für Tests erstellen
$request = new Request(
method: 'POST',
path: '/users',
body: ['name' => 'Max', 'email' => 'max@test.de'],
headers: ['content-type' => 'application/json'],
);
Pfad-Bereinigung
Der Pfad wird automatisch bereinigt beim Erstellen des Request-Objekts:
PHP – Bereinigungslogik
// Null-Bytes werden entfernt (Injection-Schutz)
// Doppelte Slashes werden normalisiert
// URL-Encoding wird dekodiert
// /users//42 → /users/42
// /users%2F42 → /users/42
// /users\0/42 → /users/42