Request-Daten verarbeiten
Request-Daten verarbeiten
~14 Min. Lesezeit Zuletzt aktualisiert am 8. August 2026
Neben Route-Parametern gibt es drei weitere Quellen für Eingabedaten: Query-Parameter, Body-Daten und Header. Symfonys Request-Objekt bündelt sie alle einheitlich.
Das Request-Objekt injizieren
Ein Controller-Parameter vom Typ Request wird von Symfony AUTOMATISCH mit der aktuellen Anfrage befüllt – KEIN Autowiring-Service, sondern ein spezieller, von Symfony selbst erkannter Typ:
use Symfony\Component\HttpFoundation\Request;
#[Route('/projects', name: 'project_index', methods: ['GET'])]
public function index(Request $request): Response
{
// $request steht jetzt zur Verfügung
return new Response('...');
}Query-Parameter lesen: $request->query
Für /projects?status=aktiv&sortierung=name:
$status = $request->query->get('status'); // 'aktiv'
$sortierung = $request->query->get('sortierung', 'erstellt'); // 'name', Default: 'erstellt'
$seite = $request->query->getInt('seite', 1); // typisiert als int, Default 1getInt(), getBoolean() und weitere typisierte Getter vermeiden manuelle (int)-Casts und liefern bei fehlendem Parameter automatisch den angegebenen Default-Wert.
POST-Formulardaten lesen: $request->request
Verwirrend benannt, aber wichtig zu wissen: $request->request (NICHT $request selbst!) enthält klassische Formulardaten (application/x-www-form-urlencoded oder multipart/form-data):
$titel = $request->request->get('titel');
$beschreibung = $request->request->get('beschreibung', '');Tipp: In der PRAXIS greifen wir bei Formularen fast NIE direkt auf $request->request zu – Symfony Forms (Kapitel 15) übernehmen das Auslesen, Validieren und Zuordnen zu Objekten automatisch. Der direkte Zugriff hier dient nur dem Verständnis, WAS unter der Haube passiert.
JSON-Body lesen: für spätere API-Endpunkte
$daten = json_decode($request->getContent(), true);
$titel = $daten['titel'] ?? null;getContent() liefert den rohen Anfrage-Body als String – für JSON-Anfragen (wie sie eine spätere API-Erweiterung unseres Aufgaben-Managers nutzen könnte) der richtige Weg, da $request->request NUR formularkodierte Daten versteht.
Header lesen: $request->headers
$userAgent = $request->headers->get('User-Agent');
$istAjax = $request->headers->get('X-Requested-With') === 'XMLHttpRequest';Datei-Uploads: $request->files
$hochgeladeneDatei = $request->files->get('anhang');
if ($hochgeladeneDatei !== null) {
$originalName = $hochgeladeneDatei->getClientOriginalName();
}Ein UploadedFile-Objekt statt eines rohen Strings – bietet u. a. getClientOriginalName(), getMimeType() und move() zum Speichern am Zielort, alles typsicher statt über PHPs klassisches $_FILES-Superglobal.
Übersicht: alle Request-Datenquellen
| Zugriff | Enthält |
|---|---|
| $request->query | URL-Query-Parameter (?key=value) |
| $request->request | POST-Formulardaten (form-urlencoded/multipart) |
| $request->getContent() | Roher Body, z. B. für JSON-APIs |
| $request->headers | HTTP-Header |
| $request->files | Hochgeladene Dateien |
| $request->cookies | Cookies |