Vai al contenuto principale

Routing di base

La route più semplice di Laravel accetta un URI e una closure. Puoi definire in modo semplice route e comportamento senza complessi file di configurazione.
use Illuminate\Support\Facades\Route;

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

File di route predefiniti

Tutte le route Laravel sono definite nei file di route della directory routes/. Questi file vengono caricati automaticamente da Laravel in base alla configurazione di bootstrap/app.php. In routes/web.php definisci le route destinate al browser. Alle route di questo file si applica il gruppo di middleware web, che fornisce sessione, protezione CSRF e cifratura dei cookie.
use App\Http\Controllers\UserController;

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

Route API

Se la tua applicazione espone un’API stateless, puoi abilitare il routing API con il comando Artisan install:api.
php artisan install:api
Il comando install:api installa Laravel Sanctum e crea il file routes/api.php. Sanctum fornisce una guard di autenticazione tramite API token semplice e robusta, adatta a consumatori API di terze parti, SPA e applicazioni mobili.
Route::get('/user', function (Request $request) {
    return $request->user();
})->middleware('auth:sanctum');
Le route di routes/api.php sono stateless e vi si applica il gruppo di middleware api. Inoltre, a tutte le route viene applicato automaticamente il prefisso URI /api, quindi non serve aggiungerlo manualmente. Per cambiare il prefisso, modifica il file bootstrap/app.php dell’applicazione.
->withRouting(
    api: __DIR__.'/../routes/api.php',
    apiPrefix: 'api/admin',
    // ...
)

Metodi HTTP disponibili

Il router permette di registrare route per tutti i metodi HTTP.
Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);
Per route che rispondono a più metodi HTTP usa match o any.
Route::match(['get', 'post'], '/', function () {
    // ...
});

Route::any('/', function () {
    // ...
});
Nei form HTML che accettano POST, PUT, PATCH o DELETE nei file di route web, includi sempre la direttiva @csrf. In caso contrario la richiesta viene rifiutata.

Route che restituiscono una vista

Se una route restituisce solo una vista, puoi usare Route::view per scrivere in modo conciso.
Route::view('/welcome', 'welcome');

// Passa dati alla vista
Route::view('/welcome', 'welcome', ['name' => 'Taylor']);

Parametri di route

Parametri obbligatori

Per ottenere dinamicamente parti dell’URL usa i parametri di route. Racchiudi i parametri tra {} e ricevili come argomenti della callback della route.
Route::get('/user/{id}', function (string $id) {
    return 'ID utente: ' . $id;
});
Puoi definire anche più parametri.
Route::get('/posts/{post}/comments/{comment}', function (string $postId, string $commentId) {
    return "Commento {$commentId} del post {$postId}";
});
I parametri di route non possono contenere il carattere /.

Parametri opzionali

Per rendere opzionale un parametro, aggiungi ? in fondo al suo nome e imposta un valore predefinito per l’argomento corrispondente.
Route::get('/user/{name?}', function (?string $name = null) {
    return $name ?? 'Ospite';
});

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

Vincoli sui parametri tramite espressioni regolari

Con il metodo where puoi vincolare il formato dei parametri con espressioni regolari.
Route::get('/user/{id}', function (string $id) {
    // ...
})->where('id', '[0-9]+');

Route::get('/user/{name}', function (string $name) {
    // ...
})->where('name', '[a-zA-Z]+');
I pattern più comuni possono essere scritti anche con metodi comodi.
Route::get('/user/{id}/{name}', function (string $id, string $name) {
    // ...
})->whereNumber('id')->whereAlpha('name');

Route con nome

Con le route con nome puoi fare riferimento a una route tramite il suo nome quando generi URL o effettui redirect.
Route::get('/user/profile', function () {
    // ...
})->name('profile');

Generazione dell’URL a partire dal nome della route

Per generare un URL dal nome di una route usa l’helper route.
// Genera l'URL
$url = route('profile');

// Genera l'URL con parametri
$url = route('user.show', ['id' => 1]);

Redirect

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

Gruppi di route

Raggruppa le route correlate per condividere impostazioni comuni come middleware, controller e prefissi.

Middleware

Route::middleware(['auth'])->group(function () {
    Route::get('/dashboard', function () {
        // Accessibile solo agli utenti autenticati
    });

    Route::get('/account', function () {
        // Accessibile solo agli utenti autenticati
    });
});

Controller

Puoi raggruppare le route che usano lo stesso controller.
use App\Http\Controllers\OrderController;

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

Prefisso

Puoi anteporre un prefisso comune all’URI delle route.
Route::prefix('admin')->group(function () {
    Route::get('/users', function () {
        // Accessibile su /admin/users
    });
    Route::get('/posts', function () {
        // Accessibile su /admin/posts
    });
});

Elenco delle route

Per elencare tutte le route definite, usa il comando Artisan.
php artisan route:list
Per includere anche le informazioni sui middleware:
php artisan route:list -v
Per mostrare solo le route che iniziano con un URI specifico:
php artisan route:list --path=user

Prossimi passi

Viste

Impara a creare viste e a passare dati da un controller.
Ultima modifica il 13 luglio 2026