Vai al contenuto principale

Introduzione

Laravel Folio è un router basato sulle pagine che ti consente di definire le route semplicemente collocando file Blade. A differenza della definizione tradizionale centrata su routes/web.php, riflette direttamente nell’URL la struttura del filesystem. È particolarmente utile per siti orientati ai contenuti o per pannelli di amministrazione in cui vuoi aggiungere rapidamente pagine schermata per schermata. Per aree che richiedono un controllo HTTP granulare, come le API, in pratica lo si affianca al routing tradizionale.

Installazione

Per prima cosa aggiungi Folio con Composer.
composer require laravel/folio
php artisan folio:install
folio:install registra il service provider di Folio. Per impostazione predefinita la directory delle pagine è resources/views/pages/. Se usi più directory di pagine o vuoi differenziare gli URI di base, configura Folio::path() e uri() nel metodo boot del service provider.
use Laravel\Folio\Folio;

Folio::path(resource_path('views/pages/guest'))->uri('/');

Folio::path(resource_path('views/pages/admin'))
    ->uri('/admin');

Creazione delle route

Folio genera automaticamente l’URL dal nome del file Blade posto sotto la directory montata.
resources/views/pages/schedule.blade.php -> /schedule
php artisan folio:list

Route annidate

Annidando le directory, anche l’URL viene annidato con la stessa struttura.
php artisan folio:page user/profile
# pages/user/profile.blade.php -> /user/profile

Route index

index.blade.php viene mappato sulla root della sua directory.
php artisan folio:page index
# pages/index.blade.php -> /

php artisan folio:page users/index
# pages/users/index.blade.php -> /users

Parametri di route

Puoi ricevere segmenti di URL con [] nel nome del file.
php artisan folio:page "users/[id]"
# pages/users/[id].blade.php -> /users/1
<div>User {{ $id }}</div>
Per ricevere più segmenti usa ....
php artisan folio:page "users/[...ids]"
# pages/users/[...ids].blade.php -> /users/1/2/3
@foreach ($ids as $id)
    <li>User {{ $id }}</li>
@endforeach

Route model binding

Se usi il nome del modello, come [User].blade.php, la risoluzione del modello avviene automaticamente.
php artisan folio:page "users/[User]"
# pages/users/[User].blade.php -> /users/1
<div>User {{ $user->id }}</div>
Per gestire anche i modelli soft-deleted, chiama withTrashed() all’interno della pagina.
<?php

use function Laravel\Folio\withTrashed;

withTrashed();
Scrivendo ad esempio [Post:slug].blade.php, puoi risolvere il modello anche con chiavi diverse da id (ad esempio slug).

Middleware

Per applicare un middleware solo a una pagina specifica, usa middleware() all’interno del template della pagina.
<?php

use function Laravel\Folio\middleware;

middleware(['auth', 'verified']);
Per applicarlo in blocco a più pagine, usa Folio::path(...)->middleware().
<?php

use Laravel\Folio\Folio;

Folio::path(resource_path('views/pages'))->middleware([
    'admin/*' => ['auth', 'verified'],
]);

Route con nome

Anche le pagine Folio possono avere un nome tramite name().
<?php

use function Laravel\Folio\name;

name('users.index');
Definendo name('users.show') in una pagina individuale come users/[User].blade.php, puoi generare l’URL parametrizzato con route('users.show', ['user' => $user]).
Con l’helper route() puoi generare l’URL a partire dal nome della route.
route('users.index');
route('users.show', ['user' => $user]);

Corrispondenza tra file e URL

Confronto con il routing tradizionale

CaratteristicaRouting tradizionaleFolio
Definizione delle routeroutes/web.phpAutomatica dal nome del file
ControllerNecessario (o closure)Non necessario (direttamente in Blade)
Casi d’uso adattiAPI, SPA, controllo HTTP complessoSiti di contenuto, pannelli di amministrazione
Anche usando Folio, puoi ottimizzare le prestazioni in produzione abilitando la cache delle route con php artisan route:cache.
Ultima modifica il 13 luglio 2026