> ## 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

> Leer hoe je bestandsgebaseerde routing implementeert met Laravel Folio, van installatie tot route model binding.

## Introductie

Laravel Folio is een paginagebaseerde router waarmee je routes definieert door simpelweg Blade-bestanden te plaatsen.
Anders dan de traditionele definitie via `routes/web.php`, wordt de structuur van het bestandssysteem rechtstreeks weerspiegeld in de URL's.

Folio is vooral handig voor contentgerichte sites en beheerpanelen waar je snel pagina's per scherm wilt toevoegen.
Voor onderdelen die fijnmazige HTTP-controle vereisen, zoals API's, is het praktischer om Folio te combineren met gewone routing.

## Installatie

Voeg Folio eerst toe via Composer.

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

`folio:install` registreert de serviceprovider van Folio.
Standaard is `resources/views/pages/` de paginadirectory.
Wil je meerdere paginadirectories of verschillende basis-URI's gebruiken, dan stel je in de `boot`-methode van de serviceprovider `Folio::path()` en `uri()` in.

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

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

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

## Routes maken

Folio genereert automatisch URL's op basis van de Blade-bestandsnamen in de gemounte directory.

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

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

### Geneste routes

Als je directories nest, worden de URL's met dezelfde structuur genest.

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

### Indexroutes

`index.blade.php` wordt gemapt op de root van de betreffende directory.

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

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

## Routeparameters

Met `[]` in de bestandsnaam kun je URL-segmenten ontvangen.

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

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

Wil je meerdere segmenten ontvangen, gebruik dan `...`.

```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

Gebruik je een modelnaam zoals in `[User].blade.php`, dan wordt het model automatisch opgelost.

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

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

Wil je ook soft-deleted modellen ophalen, roep dan `withTrashed()` aan binnen de pagina.

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

use function Laravel\Folio\withTrashed;

withTrashed();
```

<Info>
  Schrijf je `[Post:slug].blade.php`, dan kun je het model ook oplossen op een andere sleutel dan `id` (bijvoorbeeld `slug`).
</Info>

## Middleware

Wil je middleware alleen op een specifieke pagina toepassen, gebruik dan `middleware()` binnen de paginatemplate.

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

use function Laravel\Folio\middleware;

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

Wil je middleware in één keer op meerdere pagina's toepassen, gebruik dan `Folio::path(...)->middleware()`.

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

use Laravel\Folio\Folio;

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

## Benoemde routes

Ook Folio-pagina's kun je met `name()` een routenaam geven.

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

use function Laravel\Folio\name;

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

<Info>
  Definieer je op een individuele pagina zoals `users/[User].blade.php` de naam `name('users.show')`, dan kun je URL's met parameters genereren via `route('users.show', ['user' => $user])`.
</Info>

Met de toegekende routenaam kun je via de `route()`-helper URL's genereren.

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

## Overeenkomst tussen bestanden en URL's

```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"]
```

## Vergelijking met traditionele routing

| Kenmerk        | Gewone routing                       | Folio                              |
| -------------- | ------------------------------------ | ---------------------------------- |
| Routedefinitie | `routes/web.php`                     | Automatisch via bestandsnaam       |
| Controller     | Nodig (of een closure)               | Niet nodig (rechtstreeks in Blade) |
| Geschikt voor  | API's, SPA's, complexe HTTP-controle | Contentsites, beheerpanelen        |

<Tip>
  Ook als je Folio gebruikt, kun je met `php artisan route:cache` de routecache inschakelen om de productieprestaties te optimaliseren.
</Tip>


## Related topics

- [Applicatiestructuur van Laravel 11 en later](/nl/advanced/app-structure.md)
- [Laravel Boost](/nl/boost.md)
- [Laravel Telescope](/nl/telescope.md)
- [Laravel Octane](/nl/octane.md)
- [Laravel Bluesky](/nl/packages/laravel-bluesky/index.md)
