> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# Laravel Folio

> Comment mettre en place un routage basé sur les fichiers avec Laravel Folio, de l'installation au route model binding.

## Introduction

Laravel Folio est un routeur orienté pages qui vous permet de définir des routes simplement en plaçant des fichiers Blade.
Contrairement à la définition traditionnelle centrée sur `routes/web.php`, la structure du système de fichiers se reflète directement dans les URL.

Folio est particulièrement utile pour les sites axés sur le contenu ou les back-offices où vous souhaitez ajouter rapidement de nouvelles pages.
Pour les zones nécessitant un contrôle HTTP fin, comme les API, il est pragmatique de le combiner avec le routage classique.

## Installation

Ajoutez d'abord Folio via Composer.

```bash theme={null}
composer require laravel/folio
php artisan folio:install
```

`folio:install` enregistre le service provider de Folio.
Par défaut, `resources/views/pages/` devient le répertoire des pages.
Pour utiliser plusieurs répertoires de pages ou différentes URI de base, configurez `Folio::path()` et `uri()` dans la méthode `boot` d'un service provider.

```php theme={null}
use Laravel\Folio\Folio;

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

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

## Création de routes

Folio génère automatiquement les URL à partir des noms de fichiers Blade situés sous le répertoire monté.

```text theme={null}
resources/views/pages/schedule.blade.php -> /schedule
```

```bash theme={null}
php artisan folio:list
```

### Routes imbriquées

Lorsque vous imbriquez des répertoires, les URL sont imbriquées selon la même structure.

```bash theme={null}
php artisan folio:page user/profile
# pages/user/profile.blade.php -> /user/profile
```

### Route d'index

`index.blade.php` est associé à la racine de son répertoire.

```bash theme={null}
php artisan folio:page index
# pages/index.blade.php -> /

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

## Paramètres de route

Les crochets `[]` dans le nom de fichier permettent de recevoir un segment d'URL.

```bash theme={null}
php artisan folio:page "users/[id]"
# pages/users/[id].blade.php -> /users/1
```

```blade theme={null}
<div>User {{ $id }}</div>
```

Pour recevoir plusieurs segments, utilisez `...`.

```bash theme={null}
php artisan folio:page "users/[...ids]"
# pages/users/[...ids].blade.php -> /users/1/2/3
```

```blade theme={null}
@foreach ($ids as $id)
    <li>User {{ $id }}</li>
@endforeach
```

## Route model binding

En utilisant un nom de modèle comme `[User].blade.php`, la résolution du modèle est automatique.

```bash theme={null}
php artisan folio:page "users/[User]"
# pages/users/[User].blade.php -> /users/1
```

```blade theme={null}
<div>User {{ $user->id }}</div>
```

Pour prendre en charge également les modèles supprimés en douceur, appelez `withTrashed()` dans la page.

```php theme={null}
<?php

use function Laravel\Folio\withTrashed;

withTrashed();
```

<Info>
  En écrivant `[Post:slug].blade.php`, vous pouvez résoudre le modèle avec une clé autre que `id` (par exemple `slug`).
</Info>

## Middleware

Pour appliquer un middleware à une page spécifique uniquement, utilisez `middleware()` dans le template.

```php theme={null}
<?php

use function Laravel\Folio\middleware;

middleware(['auth', 'verified']);
```

Pour appliquer un middleware en masse à plusieurs pages, utilisez `Folio::path(...)->middleware()`.

```php theme={null}
<?php

use Laravel\Folio\Folio;

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

## Routes nommées

Vous pouvez également attribuer un nom de route aux pages Folio avec `name()`.

```php theme={null}
<?php

use function Laravel\Folio\name;

name('users.index');
```

<Info>
  En définissant `name('users.show')` dans une page individuelle telle que `users/[User].blade.php`, vous pouvez générer une URL avec paramètre via `route('users.show', ['user' => $user])`.
</Info>

Les noms de routes attribués permettent de générer des URL avec le helper `route()`.

```php theme={null}
route('users.index');
route('users.show', ['user' => $user]);
```

## Correspondance fichiers / URL

```mermaid theme={null}
graph LR
  A["pages/index.blade.php"] --> B["/"]
  C["pages/about.blade.php"] --> D["/about"]
  E["pages/users/[User].blade.php"] --> F["/users/1"]
```

## Comparaison avec le routage classique

| Caractéristique     | Routage classique                | Folio                               |
| ------------------- | -------------------------------- | ----------------------------------- |
| Définition de route | `routes/web.php`                 | Automatique via le nom de fichier   |
| Contrôleur          | Requis (ou closure)              | Non requis (directement dans Blade) |
| Cas d'usage         | API, SPA, contrôle HTTP complexe | Sites de contenu, back-offices      |

<Tip>
  Même avec Folio, activer le cache de routes via `php artisan route:cache` permet d'optimiser les performances en production.
</Tip>


## Related topics

- [Structure d'application Laravel 11+](/fr/advanced/app-structure.md)
- [Laravel Boost](/fr/boost.md)
- [Laravel Telescope](/fr/telescope.md)
- [Laravel Octane](/fr/octane.md)
- [Laravel Bluesky](/fr/packages/laravel-bluesky/index.md)
