Laravel-13-Tutorial #2: Routing, Parameter und benannte Routen
geprüft am 7 September 2026 · 5 Min.
Routen werden in routes/web.php mit Route::get('/chemin', [MonController::class, 'methode']) deklariert. Benenne sie mit ->name(), um deine Links über route('nom') zu bauen statt fest verdrahtet. Die String-Syntax 'Controller@methode' funktioniert seit Laravel 8 nicht mehr.
Eine Route verbindet eine Adresse mit Code. Sie ist das Eingangstor jedes Requests: Laravel liest die angefragte URL, sucht die passende Route und führt aus, worauf sie zeigt. Dieses Kapitel zeigt die vier Formen, die diese Verbindung annimmt.
Die einfachste Route
Alle Routen der öffentlichen Site werden in routes/web.php deklariert. Das steht nach der Installation darin:
<?php
use Illuminate\Support\Facades\Route;
Route::get('/', function () {
return view('welcome');
});Diese Route sagt: Wenn jemand / per GET anfragt, gib die View welcome zurück, also die Datei resources/views/welcome.blade.php.
Route::get() nimmt zwei Argumente: die Adresse und das, was zu tun ist. Dieses zweite Argument kann mehrere Formen annehmen.
Einen String zurückgeben
Route::get('/bonjour', function () {
return 'Bonjour !';
});Ruf http://127.0.0.1:8000/bonjour auf: Der Browser zeigt den reinen Text an. Das taugt, um zu prüfen, ob eine Route überhaupt erreicht wird, darüber hinaus selten.
Eine View zurückgeben
Um zu prüfen, dass welcome wirklich die View der Startseite ist, öffne resources/views/welcome.blade.php und füg irgendwo im <body> eine sichtbare Zeile ein:
<h1>Bonjour tout le monde !</h1>Lad die Startseite neu: Die Überschrift erscheint. Du hast gerade eine View geändert, ohne die Route anzufassen.
Einen Controller zurückgeben
In einem echten Projekt steckt die Logik nicht in der Routendatei, sondern in einem Controller. Die Route benennt dann nur noch eine Klasse und eine Methode:
use App\Http\Controllers\PostController;
Route::get('/article', [PostController::class, 'show']);Das Array [PostController::class, 'show'] bedeutet „ruf die Methode show der Klasse PostController auf“. Den Controller gibt es noch nicht: Das nächste Kapitel legt ihn an. Achte auf das use am Dateianfang, das die Klasse importiert. Ohne es sucht PHP PostController im globalen Namespace und findet ihn nicht.
Viele Tutorials für Laravel 7 und älter nutzen Route::get('/article', 'PostController@show'). Das automatische Namespace-Präfix, das diese Form möglich machte, wurde in Laravel 8 entfernt. Unter Laravel 13 scheitert sie mit dieser Meldung:
Illuminate\Contracts\Container\BindingResolutionException
Target class [PostController] does not exist.Laravel sucht die Klasse in der Wurzel des Namespace statt in App\Http\Controllers. Nimm immer die Form mit dem Array.
Die URL-Parameter
Ein Blog braucht variable Adressen: /article/mon-premier-article, /article/un-autre. Der Teil, der sich ändert, wird zum Parameter und steht in geschweiften Klammern:
Route::get('/article/{slug}', function (string $slug) {
return "Vous avez demandé l'article : {$slug}";
});Laravel fängt alles ab, was auf /article/ folgt, und übergibt es der Funktion unter dem Namen $slug. Der Name des Parameters in der URL und der Name des Arguments müssen übereinstimmen.
Du kannst die erwartete Form einschränken. Hier antwortet die Route nur, wenn der Bezeichner numerisch ist:
Route::get('/article/{id}', function (int $id) {
return "Article numéro {$id}";
})->whereNumber('id');Eine URL wie /article/bonjour gibt dann einen 404-Fehler zurück, statt mit einem unerwarteten Wert in deinem Code zu landen.
Die benannten Routen
URLs fest in die Templates zu schreiben ist brüchig: An dem Tag, an dem du /article/ in /blog/ umbenennst, musst du jeden einzelnen Link wiederfinden. Ein Name für die Route löst das Problem:
Route::get('/article/{slug}', [PostController::class, 'show'])->name('post');Der Link entsteht dann aus dem Namen, nie aus der Adresse:
route('post', ['slug' => 'mon-premier-article'])
// http://127.0.0.1:8000/article/mon-premier-articleIn einer Blade-View sieht das so aus:
<a href="http://%20route('post',%20$post)%20">{{ $post->title }}</a>Änder die Adresse in web.php, und alle Links ziehen mit. Genau so baut dieses Tutorial ab Kapitel 7 sämtliche Links.
Das Route Model Binding
Laravel kann noch mehr. Trägt der Parameter den Namen eines Modells, holt das Framework den Datensatz von selbst:
use App\Models\Post;
Route::get('/article/{post}', function (Post $post) {
return $post->title;
});Laravel liest das URL-Segment, fragt die Tabelle posts ab und gibt automatisch einen 404-Fehler zurück, wenn nichts passt. Du bekommst direkt das Objekt, ohne die Abfrage zu schreiben. Standardmäßig wird über die Spalte id gesucht; Kapitel 6 zeigt, wie du sie stattdessen den slug nehmen lässt.
Dieses Model Binding spart die Hälfte des üblichen Controller-Codes. Es kommt im weiteren Verlauf des Tutorials überall zum Einsatz.
Die anderen HTTP-Verben
Route::get() beantwortet lesende Requests. Für Formulare und APIs stellt Laravel die übrigen Methoden bereit:
Route::post('/article', [PostController::class, 'store']);
Route::put('/article/{post}', [PostController::class, 'update']);
Route::delete('/article/{post}', [PostController::class, 'destroy']);Dieses Tutorial nutzt nur get: Die Schreibvorgänge laufen über das Admin-Panel, das in Kapitel 4 installiert wird.
Alle Routen ansehen
Dieser Befehl listet auf, was deine Anwendung ausliefern kann:
php artisan route:list --except-vendorIm fertigen Projekt dieses Tutorials zeigt er nach der Installation des Admin-Panels aus Kapitel 4 auch die Routen des Back-Office an: Sie werden von Klassen in Ihrem Ordner app/Filament deklariert, nicht vom Paket selbst. Um nur die Seiten der Website zu sehen, fügen Sie --except-path=admin hinzu:
php artisan route:list --except-vendor --except-path=admin GET|HEAD / .................................... home › IndexController
GET|HEAD article/{post} ................... post › PostController@show
GET|HEAD categorie/{category} .......... category › CategoryController
GET|HEAD etiquette/{tag} ......................... tag › TagController
GET|HEAD recherche .................... search › PostController@searchDie Option --except-vendor blendet die von installierten Paketen hinzugefügten Routen aus, --except-path=admin lässt die des Admin-Panels weg, die durchaus Ihre eigenen sind. Es ist der erste Befehl, den man ausführt, wenn eine Adresse 404 liefert, obwohl man sie deklariert zu haben glaubte.
Das nächste Kapitel legt die Controller und die Views an, auf die diese Routen zeigen.