Routing-Grundlagen
Routing-Grundlagen
~14 Min. Lesezeit Zuletzt aktualisiert am 8. August 2026
Routing ist der ERSTE Schritt jeder Symfony-Anfrage: eine eingehende URL wird einer PHP-Methode zugeordnet. Wir beginnen jetzt mit der eigentlichen Struktur unseres Aufgaben-Manager-Projekts.
Attribut-basiertes Routing: der moderne Standard
Wie bereits in Kapitel 3 kurz gesehen, definiert Symfony Routen bevorzugt DIREKT über der Controller-Methode als PHP-Attribut – Route und Code bleiben damit an EINER Stelle sichtbar:
<?php
declare(strict_types=1);
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ProjectController extends AbstractController
{
#[Route('/projects', name: 'project_index', methods: ['GET'])]
public function index(): Response
{
return new Response('Projektliste (folgt in Kapitel 8)');
}
}name: 'project_index' vergibt einen EINDEUTIGEN, internen Bezeichner für diese Route – GENAU dieser Name wird später in Twig-Templates (Kapitel 13) und Controller-Redirects (Kapitel 11) verwendet, NIEMALS die rohe URL selbst. Das ist einer der wichtigsten Symfony-Grundsätze: URLs können sich später ändern, Routennamen bleiben stabil.
methods: ['GET'] schränkt die Route auf HTTP-GET ein – ruft ein Client dieselbe URL mit POST auf, wird diese Route NICHT gematcht (Symfony antwortet mit 405 Method Not Allowed, sofern keine andere Route passt).
Alle Routen des Projekts auflisten
php bin/console debug:routerEin unverzichtbares Werkzeug während der GESAMTEN Entwicklung – zeigt JEDE registrierte Route mit Name, Methode, Pfad und zugehörigem Controller. Bei Unsicherheit, ob eine Route wie erwartet registriert wurde, ist dies der erste Anlaufpunkt.
php bin/console debug:router project_index
# zeigt Details zu GENAU dieser einen RouteYAML-basiertes Routing: die Alternative
Symfony unterstützt weiterhin Routing über zentrale YAML-Dateien – seltener genutzt in modernem Code, aber gut zu kennen, da ältere Projekte oft so aufgebaut sind:
project_index:
path: /projects
controller: App\Controller\ProjectController::index
methods: [GET]Tipp: Diese Schulung nutzt DURCHGEHEND Attribut-Routing, wie die überwiegende Mehrheit moderner Symfony-Projekte: Route und Implementierung bleiben visuell zusammen, was besonders in größeren Codebases die Nachvollziehbarkeit deutlich erhöht.
Routing-Priorität: Reihenfolge zählt
Symfony prüft Routen in der Reihenfolge, in der sie GELADEN werden – die ERSTE passende Route gewinnt. Bei sich überschneidenden Mustern (z. B. /projects/new vs. /projects/{id}) muss die SPEZIFISCHERE Route VOR der allgemeineren stehen, sonst würde /projects/new fälschlich als {id} = 'new' interpretiert. Kapitel 9 vertieft das mit expliziten Route-Constraints.
Die Projektstruktur wächst
Projektstruktur nach Kapitel 7
src/
└── Controller/
└── ProjectController.php