Zum Hauptinhalt springen

Grundlegendes Routing

Die einfachste Route in Laravel besteht aus einer URI und einer Closure. Ohne komplizierte Konfigurationsdateien lassen sich Routen und Verhalten definieren.
use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {
    return 'Hello World';
});

Standard-Routendateien

Alle Laravel-Routen definieren Sie in den Routendateien im Verzeichnis routes/. Diese Dateien werden von Laravel gemäß der Konfiguration in bootstrap/app.php automatisch geladen. In routes/web.php definieren Sie Routen für den Browser. Auf diese Routen wird die Middleware-Gruppe web angewendet, die Session, CSRF-Schutz und Cookie-Verschlüsselung bereitstellt.
use App\Http\Controllers\UserController;

Route::get('/user', [UserController::class, 'index']);

API-Routen

Wenn Ihre Anwendung eine zustandslose API bereitstellt, aktivieren Sie das API-Routing mit dem Artisan-Befehl install:api.
php artisan install:api
Der Befehl installiert Laravel Sanctum und legt die Datei routes/api.php an. Sanctum bietet einen einfachen, robusten API-Token-Guard für externe API-Konsumenten, SPAs und Mobile-Apps.
Route::get('/user', function (Request $request) {
    return $request->user();
})->middleware('auth:sanctum');
Die Routen in routes/api.php sind zustandslos, es gilt die Middleware-Gruppe api. Zudem wird allen Routen automatisch der URI-Präfix /api vorangestellt, sodass Sie ihn nicht manuell setzen müssen. Um den Präfix anzupassen, ändern Sie die Datei bootstrap/app.php.
->withRouting(
    api: __DIR__.'/../routes/api.php',
    apiPrefix: 'api/admin',
    // ...
)

Verfügbare HTTP-Methoden

Der Router registriert Routen für alle HTTP-Methoden.
Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);
Um auf mehrere HTTP-Methoden zu reagieren, verwenden Sie match oder any.
Route::match(['get', 'post'], '/', function () {
    // ...
});

Route::any('/', function () {
    // ...
});
Für HTML-Formulare in web-Routen mit POST, PUT, PATCH oder DELETE müssen Sie unbedingt die Direktive @csrf einbinden. Andernfalls wird die Anfrage abgelehnt.

Routen, die eine View zurückgeben

Wenn eine Route lediglich eine View zurückgibt, verwenden Sie Route::view.
Route::view('/welcome', 'welcome');

// Daten an die View übergeben
Route::view('/welcome', 'welcome', ['name' => 'Taylor']);

Route-Parameter

Pflichtparameter

Um Teile der URL dynamisch aufzunehmen, verwenden Sie Route-Parameter. Sie kennzeichnen Parameter mit {} und erhalten sie als Argument in der Route-Callback.
Route::get('/user/{id}', function (string $id) {
    return 'Benutzer-ID: ' . $id;
});
Auch mehrere Parameter sind möglich.
Route::get('/posts/{post}/comments/{comment}', function (string $postId, string $commentId) {
    return "Kommentar {$commentId} zu Post {$postId}";
});
Route-Parameter dürfen kein / enthalten.

Optionale Parameter

Um einen Parameter optional zu machen, hängen Sie ? an den Namen und setzen dem Argument einen Standardwert.
Route::get('/user/{name?}', function (?string $name = null) {
    return $name ?? 'Gast';
});

Route::get('/user/{name?}', function (?string $name = 'Gast') {
    return $name;
});

Parameter mit regulären Ausdrücken einschränken

Mit where schränken Sie das Format eines Parameters per Regex ein.
Route::get('/user/{id}', function (string $id) {
    // ...
})->where('id', '[0-9]+');

Route::get('/user/{name}', function (string $name) {
    // ...
})->where('name', '[a-zA-Z]+');
Häufig genutzte Muster stehen als Convenience-Methoden bereit.
Route::get('/user/{id}/{name}', function (string $id, string $name) {
    // ...
})->whereNumber('id')->whereAlpha('name');

Benannte Routen

Benannte Routen erlauben es, beim Generieren von URLs oder Redirects auf den Namen zu verweisen.
Route::get('/user/profile', function () {
    // ...
})->name('profile');

URL-Erzeugung für benannte Routen

Zur URL-Erzeugung verwenden Sie den route-Helper.
// URL erzeugen
$url = route('profile');

// URL mit Parametern
$url = route('user.show', ['id' => 1]);

Redirect

return redirect()->route('profile');

Route-Gruppen

Zusammengehörige Routen lassen sich gruppieren, um Middleware, Controller oder Präfixe gemeinsam zu setzen.

Middleware

Route::middleware(['auth'])->group(function () {
    Route::get('/dashboard', function () {
        // Nur für angemeldete Benutzer erreichbar
    });

    Route::get('/account', function () {
        // Nur für angemeldete Benutzer erreichbar
    });
});

Controller

Routen, die denselben Controller verwenden, lassen sich gruppieren.
use App\Http\Controllers\OrderController;

Route::controller(OrderController::class)->group(function () {
    Route::get('/orders', 'index');
    Route::post('/orders', 'store');
    Route::get('/orders/{id}', 'show');
});

Präfix

Sie können den URIs einer Gruppe einen gemeinsamen Präfix voranstellen.
Route::prefix('admin')->group(function () {
    Route::get('/users', function () {
        // erreichbar unter /admin/users
    });
    Route::get('/posts', function () {
        // erreichbar unter /admin/posts
    });
});

Übersicht aller Routen

Um alle definierten Routen anzuzeigen, nutzen Sie den Artisan-Befehl:
php artisan route:list
Um zusätzlich Middleware-Informationen anzuzeigen:
php artisan route:list -v
Um nur Routen mit einer bestimmten URI anzuzeigen:
php artisan route:list --path=user

Nächste Schritte

Views

Erfahren Sie, wie Sie Views erstellen und Daten aus Controllern übergeben.
Zuletzt geändert am 13. Juli 2026