Prologo
Primi Passi
Architettura
Le Basi
- Routing
- Middleware
- Protezione da CSRF
- Controller
- Richieste
- Risposte
- Views
- Blade
- Vite
- URL
- Sessioni
- Validazione
- Errori
- Logging
Approfondimenti
- Artisan
- Broadcasting
- Cache
- Collezioni
- Concorrenza
- Contesto
- Contratti
- Eventi
- File System
- Helpers
- Client HTTP
- Localizzazione
- Notifiche
- Sviluppo di Package
- Processi
- Code
- Rate-limiting
- Stringhe
- Scheduling di Task
Sicurezza
Database
Eloquent ORM
Testing
Package
Folio
- Introduzione
- Installazione
- Creare le Route
- Parametri della Route
- Route Model Binding
- Render Hooks
- Rotte Nominate
- Middleware
- Caching delle Rotte
Introduzione
Laravel Folio è un potente router basato su pagine progettato per semplificare il routing nelle applicazioni Laravel. Con Laravel Folio, generare una route diventa semplice come creare un template Blade all’interno della directory resources/views/pages
della tua applicazione.
Per esempio, per creare una pagina accessibile all’URL /greeting
, basta creare un file greeting.blade.php
nella directory resources/views/pages
della tua applicazione:
<div>
Hello World
</div>
Installazione
Per iniziare, installa Folio nel tuo progetto usando il package manager Composer:
composer require laravel/folio
Dopo aver installato Folio, puoi eseguire il comando Artisan folio:install
, che installerà il service provider di Folio nella tua applicazione. Questo service provider registra la directory in cui Folio cercherà route / pagine:
php artisan folio:install
Percorsi delle Pagine / URI
Per impostazione predefinita, Folio fornisce le pagine dalla directory resources/views/pages
della tua applicazione, ma puoi personalizzare queste directory nel metodo boot
del tuo service provider di Folio.
Ad esempio, a volte può essere utile specificare più percorsi Folio nella stessa applicazione Laravel. Potresti voler avere una directory separata di pagine Folio per l’area "admin" della tua applicazione, mentre utilizzi un’altra directory per le restanti pagine della tua applicazione.
Puoi fare questo utilizzando i metodi Folio::path
e Folio::uri
. Il metodo path
registra una directory che Folio esaminerà per le pagine durante il routing delle richieste HTTP in arrivo, mentre il metodo uri
specifica l’"URI base" per quella directory di pagine:
use Laravel\Folio\Folio;
Folio::path(resource_path('views/pages/guest'))->uri('/');
Folio::path(resource_path('views/pages/admin'))
->uri('/admin')
->middleware([
'*' => [
'auth',
'verified',
// ...
],
]);
Subdomain Routing
Puoi anche instradare le richieste in base al sottodominio della richiesta in arrivo. Ad esempio, potresti voler indirizzare le richieste da admin.example.com
a una directory di pagine diversa rispetto al resto delle pagine di Folio. Puoi fare ciò invocando il metodo domain
dopo aver invocato il metodo Folio::path
:
use Laravel\Folio\Folio;
Folio::domain('admin.example.com')
->path(resource_path('views/pages/admin'));
Il metodo domain
permette anche di catturare parti del dominio o del sottodominio come parametri. Questi parametri verranno iniettati nel tuo template di pagina:
use Laravel\Folio\Folio;
Folio::domain('{account}.example.com')
->path(resource_path('views/pages/admin'));
Creare le Route
Puoi creare una route Folio posizionando un template Blade in una delle directory montate da Folio. Per impostazione predefinita, Folio monta la directory resources/views/pages
, ma puoi personalizzare queste directory nel metodo boot
del provider di servizi di Folio.
Una volta che un template Blade è stato posizionato in una directory montata da Folio, puoi accedervi immediatamente tramite il tuo browser. Ad esempio, una pagina posizionata in pages/schedule.blade.php
può essere accessibile nel tuo browser all’indirizzo http://example.com/schedule
.
Per visualizzare rapidamente un elenco di tutte le tue pagine / route Folio, puoi eseguire il comando Artisan folio:list
:
php artisan folio:list
Rotte annidate
Puoi creare una rotta annidata creando una o più cartelle all’interno di una delle directory di Folio. Ad esempio, per creare una pagina accessibile tramite /user/profile
, crea un template profile.blade.php
nella cartella pages/user
:
php artisan folio:page user/profile
# pages/user/profile.blade.php → /user/profile
Rotte Indice
A volte, potresti voler rendere una determinata pagina la "pagina indice" di una directory. Posizionando un template index.blade.php
all’interno di una directory Folio, tutte le richieste alla radice di quella directory verranno indirizzate a quella pagina:
php artisan folio:page index
# pages/index.blade.php → /
php artisan folio:page users/index
# pages/users/index.blade.php → /users
Parametri della Route
Spesso è necessario inserire segmenti dell’URL della richiesta nella tua pagina per poter interagire con essi. Ad esempio, potresti dover accedere all’"ID" dell’utente il cui profilo viene mostrato. Per fare ciò, puoi racchiudere un segmento del nome del file della pagina tra parentesi quadre:
php artisan folio:page "users/[id]"
# pages/users/[id].blade.php → /users/1
I segmenti catturati possono essere accessibili come variabili all’interno del tuo template Blade:
<div>
User {{ $id }}
</div>
Per catturare più segmenti, puoi anteporre al segmento racchiuso tre punti ...
:
php artisan folio:page "users/[...ids]"
# pages/users/[...ids].blade.php → /users/1/2/3
Quando si catturano più segmenti, i segmenti catturati saranno iniettati nella pagina come un array:
```html
<ul>
@foreach ($ids as $id)
<li>User {{ $id }}</li>
@endforeach
</ul>
Route Model Binding
Se una parte variabile del nome del file del tuo template di pagina corrisponde a uno dei modelli Eloquent della tua applicazione, Folio sfrutterà automaticamente le capacità di route model binding di Laravel e tenterà di iniettare l’istanza del modello risolta nella tua pagina:
php artisan folio:page "users/[User]"
# pages/users/[User].blade.php → /users/1
I modelli catturati possono essere accessibili come variabili all’interno del tuo template Blade. Il nome della variabile del modello sarà convertito in "camel case":
```html
<div>
User {{ $user->id }}
</div>
Personalizzare la Chiave
A volte potresti voler risolvere i modelli Eloquent legati usando una colonna diversa da id
. Per farlo, puoi specificare la colonna nel nome del file della pagina. Ad esempio, una pagina con il nome del file [Post:slug].blade.php
cercherà di risolvere il modello legato tramite la colonna slug
anziché la colonna id
.
Su Windows, dovresti usare -
per separare il nome del modello dalla chiave: [Post-slug].blade.php
.
Posizione del Model
Di default, Folio cercherà il tuo model nella directory app/Models
della tua applicazione. Tuttavia, se necessario, puoi specificare il nome completamente qualificato della classe model nel nome del file del tuo template:
php artisan folio:page "users/[.App.Models.User]"
# pages/users/[.App.Models.User].blade.php → /users/1
Soft Deleted Model
Per impostazione predefinita, i modelli che sono stati soft deleted non vengono recuperati durante la risoluzione dei binding impliciti dei modelli. Tuttavia, se lo desideri, puoi istruire Folio a recuperare i modelli soft deleted invocando la funzione withTrashed
all’interno del template della pagina:
<?php
use function Laravel\Folio\{withTrashed};
withTrashed();
?>
<div>
User {{ $user->id }}
</div>
Render Hooks
Di default, Folio restituisce il contenuto del template Blade della pagina come risposta alla richiesta in arrivo. Tuttavia, puoi personalizzare la risposta invocando la funzione render
all’interno del template della pagina.
La funzione render
accetta una closure che riceverà l’istanza di View
che Folio sta renderizzando, permettendoti di aggiungere dati aggiuntivi alla view o personalizzare l’intera risposta. Oltre a ricevere l’istanza di View
, qualsiasi parametro di rotta aggiuntivo o binding di modello sarà fornito alla closure render
:
<?php
use App\Models\Post;
use Illuminate\Support\Facades\Auth;
use Illuminate\View\View;
use function Laravel\Folio\render;
render(function (View $view, Post $post) {
if (! Auth::user()->can('view', $post)) {
return response('Unauthorized', 403);
}
return $view->with('photos', $post->author->photos);
}); ?>
<div>
{{ $post->content }}
</div>
<div>
This author has also taken {{ count($photos) }} photos.
</div>
Rotte Nominate
Puoi specificare un nome per la route di una determinata pagina usando la funzione name
:
<?php
use function Laravel\Folio\name;
name('users.index');
Proprio come le rotte nominate di Laravel, puoi usare la funzione route
per generare URL per le pagine di Folio a cui è stato assegnato un nome:
<a href="{{ route('users.index') }}">
Tutti gli Utenti
</a>
Se la pagina ha dei parametri, puoi semplicemente passare i loro valori alla funzione route
:
route('users.show', ['user' => $user]);
Middleware
Puoi applicare un middleware a una pagina specifica invocando la funzione middleware
all’interno del template della pagina:
<?php
use function Laravel\Folio\{middleware};
middleware(['auth', 'verified']);
?>
<div>
Dashboard
</div>
Oppure, per assegnare un middleware a un gruppo di pagine, puoi concatenare il metodo middleware
dopo aver invocato il metodo Folio::path
.
Per specificare a quali pagine applicare il middleware, l’array di middleware può essere indicizzato utilizzando i pattern URL corrispondenti delle pagine a cui devono essere applicati. Il carattere *
può essere utilizzato come jolly:
use Laravel\Folio\Folio;
Folio::path(resource_path('views/pages'))->middleware([
'admin/*' => [
'auth',
'verified',
// ...
],
]);
Puoi includere delle closure nell’array di middleware per definire middleware anonimi e inline:
use Closure;
use Illuminate\Http\Request;
use Laravel\Folio\Folio;
Folio::path(resource_path('views/pages'))->middleware([
'admin/*' => [
'auth',
'verified',
function (Request $request, Closure $next) {
// ...
return $next($request);
},
],
]);
Caching delle Rotte
Quando usi Folio, dovresti sempre sfruttare le capacità di caching delle rotte di Laravel. Folio ascolta il comando Artisan route:cache
per assicurarsi che le definizioni delle pagine e i nomi delle rotte di Folio siano correttamente memorizzati nella cache per ottenere le migliori prestazioni.