Estamos actualizando el sitio. Durante unos días es posible que veas fallos de diseño o de traducción. La documentación sigue disponible: si una página se ve mal, recárgala más tarde.

Inicio Laravel 10.x Folio de Laravel

Folio de Laravel

10.x 7 de mar. de 2026

#Introducción

Laravel Folio es un potente enrutador basado en páginas diseñado para simplificar el routing en aplicaciones Laravel. Con Laravel Folio, generar una ruta es tan sencillo como crear una plantilla Blade dentro del directorio resources/views/pages de su aplicación.

Por ejemplo, para crear una página accesible en la URL /greeting, simplemente cree un archivo greeting.blade.php en el directorio resources/views/pages de su aplicación:

<div>
    Hello World
</div>

#Instalación

Para comenzar, instale Folio en su proyecto usando el gestor de paquetes Composer:

composer require laravel/folio

Después de instalar Folio, puede ejecutar el comando Artisan folio:install, que instalará el service provider de Folio en su aplicación. Este service provider registra el directorio donde Folio buscará rutas / páginas:

php artisan folio:install

#Rutas de página / URIs

Por defecto, Folio sirve páginas desde el directorio resources/views/pages de su aplicación, pero puede personalizar estos directorios en el método boot del service provider de Folio.

Por ejemplo, a veces puede ser conveniente especificar múltiples rutas Folio en la misma aplicación Laravel. Puede querer tener un directorio separado de páginas Folio para el área "admin" de su aplicación, mientras usa otro directorio para el resto de las páginas.

Puede lograr esto usando los métodos Folio::path y Folio::uri. El método path registra un directorio que Folio escaneará para páginas al enrutar solicitudes HTTP entrantes, mientras que el método uri especifica la "URI base" para ese directorio de páginas:

use Laravel\Folio\Folio;

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

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

            // ...
        ],
    ]);

#Routing por subdominio

También puede enrutar a páginas basándose en el subdominio de la solicitud entrante. Por ejemplo, puede querer enrutar solicitudes desde admin.example.com a un directorio de páginas diferente al resto de sus páginas Folio. Puede lograr esto invocando el método domain después de llamar a Folio::path:

use Laravel\Folio\Folio;

Folio::domain('admin.example.com')
    ->path(resource_path('views/pages/admin'));

El método domain también le permite capturar partes del dominio o subdominio como parámetros. Estos parámetros serán inyectados en su plantilla de página:

use Laravel\Folio\Folio;

Folio::domain('{account}.example.com')
    ->path(resource_path('views/pages/admin'));

#Creación de rutas

Puede crear una ruta Folio colocando una plantilla Blade en cualquiera de sus directorios montados de Folio. Por defecto, Folio monta el directorio resources/views/pages, pero puede personalizar estos directorios en el método boot del service provider de Folio.

Una vez que una plantilla Blade ha sido colocada en un directorio montado por Folio, puede acceder a ella inmediatamente desde su navegador. Por ejemplo, una página colocada en pages/schedule.blade.php puede ser accedida en su navegador en http://example.com/schedule.

Para ver rápidamente una lista de todas sus páginas / rutas Folio, puede invocar el comando Artisan folio:list:

php artisan folio:list

#Rutas anidadas

Puede crear una ruta anidada creando uno o más directorios dentro de uno de los directorios de Folio. Por ejemplo, para crear una página accesible vía /user/profile, cree una plantilla profile.blade.php dentro del directorio pages/user:

php artisan make:folio user/profile

# pages/user/profile.blade.php → /user/profile

#Rutas índice

A veces, puede querer que una página dada sea el "índice" de un directorio. Colocando una plantilla index.blade.php dentro de un directorio Folio, cualquier solicitud a la raíz de ese directorio será enrutada a esa página:

php artisan make:folio index
# pages/index.blade.php → /

php artisan make:folio users/index
# pages/users/index.blade.php → /users

#Parámetros de ruta

A menudo, necesitará que segmentos de la URL de la solicitud entrante sean inyectados en su página para poder interactuar con ellos. Por ejemplo, puede necesitar acceder al "ID" del usuario cuyo perfil se está mostrando. Para lograr esto, puede encapsular un segmento del nombre del archivo de la página entre corchetes:

php artisan make:folio "users/[id]"

# pages/users/[id].blade.php → /users/1

Los segmentos capturados pueden ser accedidos como variables dentro de su plantilla Blade:

<div>
    User {{ $id }}
</div>

Para capturar múltiples segmentos, puede anteponer tres puntos ... al segmento encapsulado:

php artisan make:folio "users/[...ids]"

# pages/users/[...ids].blade.php → /users/1/2/3

Al capturar múltiples segmentos, los segmentos capturados serán inyectados en la página como un array:

<ul>
    @foreach ($ids as $id)
        <li>User {{ $id }}</li>
    @endforeach
</ul>

#Vinculación de modelos a rutas

Si un segmento comodín del nombre del archivo de su plantilla corresponde a uno de los modelos Eloquent de su aplicación, Folio aprovechará automáticamente las capacidades de route model binding de Laravel e intentará inyectar la instancia del modelo resuelto en su página:

php artisan make:folio "users/[User]"

# pages/users/[User].blade.php → /users/1

Los modelos capturados pueden ser accedidos como variables dentro de su plantilla Blade. El nombre de la variable del modelo será convertido a "camel case":

<div>
    User {{ $user->id }}
</div>

#Personalización de la clave

A veces puede querer resolver modelos Eloquent vinculados usando una columna distinta a id. Para ello, puede especificar la columna en el nombre del archivo de la página. Por ejemplo, una página con el nombre [Post:slug].blade.php intentará resolver el modelo vinculado mediante la columna slug en lugar de la columna id.

En Windows, debe usar - para separar el nombre del modelo de la clave: [Post-slug].blade.php.

#Ubicación del modelo

Por defecto, Folio buscará su modelo dentro del directorio app/Models de su aplicación. Sin embargo, si es necesario, puede especificar el nombre de clase completamente calificado del modelo en el nombre del archivo de su plantilla:

php artisan make:folio "users/[.App.Models.User]"

# pages/users/[.App.Models.User].blade.php → /users/1

#Modelos eliminados suavemente

Por defecto, los modelos que han sido eliminados suavemente no se recuperan al resolver bindings implícitos de modelos. Sin embargo, si lo desea, puede indicar a Folio que recupere modelos eliminados suavemente invocando la función withTrashed dentro de la plantilla de la página:

<?php

use function Laravel\Folio\{withTrashed};

withTrashed();

?>

<div>
    User {{ $user->id }}
</div>

#Ganchos de renderizado

Por defecto, Folio devolverá el contenido de la plantilla Blade de la página como respuesta a la solicitud entrante. Sin embargo, puede personalizar la respuesta invocando la función render dentro de la plantilla de la página.

La función render acepta un closure que recibirá la instancia View que Folio está renderizando, permitiéndole agregar datos adicionales a la vista o personalizar toda la respuesta. Además de recibir la instancia View, cualquier parámetro adicional de ruta o bindings de modelo también serán proporcionados al 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>

#Rutas nombradas

Puede especificar un nombre para la ruta de una página dada usando la función name:

<?php

use function Laravel\Folio\name;

name('users.index');

Al igual que con las rutas nombradas de Laravel, puede usar la función route para generar URLs a páginas Folio que hayan sido asignadas con un nombre:

<a href="{{ route('users.index') }}">
    All Users
</a>

Si la página tiene parámetros, simplemente puede pasar sus valores a la función route:

route('users.show', ['user' => $user]);

#Middleware

Puede aplicar middleware a una página específica invocando la función middleware dentro de la plantilla de la página:

<?php

use function Laravel\Folio\{middleware};

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

?>

<div>
    Dashboard
</div>

O, para asignar middleware a un grupo de páginas, puede encadenar el método middleware después de invocar el método Folio::path.

Para especificar a qué páginas debe aplicarse el middleware, el array de middleware puede tener claves con los patrones URL correspondientes a las páginas a las que deben aplicarse. El carácter * puede usarse como comodín:

use Laravel\Folio\Folio;

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

        // ...
    ],
]);

Puede incluir closures en el array de middleware para definir middleware anónimos en línea:

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);
        },
    ],
]);

#Cacheo de rutas

Al usar Folio, siempre debe aprovechar las capacidades de cacheo de rutas de Laravel. Folio escucha el comando Artisan route:cache para asegurar que las definiciones de páginas Folio y los nombres de rutas estén correctamente cacheados para un rendimiento máximo.