Documentación de Laravel 10.x
Aquí encontrarás fragmentos de código de Laravel y consejos útiles sobre desarrollo web.
Laravel Folio es un enrutador basado en páginas diseñado para simplificar el enrutamiento en aplicaciones Laravel. Con Laravel Folio, generar una ruta se vuelve tan sencillo como crear una plantilla Blade dentro del directorio resources/views/pages
de tu aplicación.
Por ejemplo, para crear una página que sea accesible en la URL /greeting
, simplemente crea un archivo greeting.blade.php
en el directorio resources/views/pages
de tu aplicación:
<div> Hello World</div>
Para empezar, instala Folio en tu proyecto utilizando el gestor de paquetes Composer:
composer require laravel/folio
Después de instalar Folio, puedes ejecutar el comando Artisan folio:install
, que instalará el proveedor de servicios de Folio en tu aplicación. Este proveedor de servicios registra el directorio donde Folio buscará rutas / páginas:
php artisan folio:install
De forma predeterminada, Folio sirve páginas desde el directorio resources/views/pages
de tu aplicación, pero puedes personalizar estos directorios en el método boot
de tu proveedor de servicios de Folio.
Por ejemplo, a veces puede ser conveniente especificar múltiples rutas de Folio en la misma aplicación de Laravel. Puedes desear tener un directorio separado de páginas de Folio para el área "admin" de tu aplicación, mientras usas otro directorio para el resto de las páginas de tu aplicación.
Puedes lograr esto utilizando los métodos Folio::path
y Folio::uri
. El método path
registra un directorio que Folio explorará en busca de páginas al enrutar las 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', // ... ], ]);
También puedes enrutar a páginas en función del subdominio de la solicitud entrante. Por ejemplo, puedes desear enrutar las solicitudes desde admin.example.com
a un directorio de páginas diferente que el resto de tus páginas de Folio. Puedes lograr esto invocando el método domain
después de invocar el método Folio::path
:
use Laravel\Folio\Folio; Folio::domain('admin.example.com') ->path(resource_path('views/pages/admin'));
El método domain
también te permite capturar partes del dominio o subdominio como parámetros. Estos parámetros se inyectarán en tu plantilla de página:
use Laravel\Folio\Folio; Folio::domain('{account}.example.com') ->path(resource_path('views/pages/admin'));
Puedes crear una ruta de Folio colocando una plantilla Blade en cualquiera de tus directorios montados de Folio. De forma predeterminada, Folio monta el directorio resources/views/pages
, pero puedes personalizar estos directorios en el método boot
de tu proveedor de servicios de Folio.
Una vez que se haya colocado una plantilla Blade en un directorio montado de Folio, puedes acceder a ella inmediatamente a través de tu navegador. Por ejemplo, una página colocada en pages/schedule.blade.php
se puede acceder en tu navegador en http://example.com/schedule
.
Para ver rápidamente una lista de todas tus páginas/rutas de Folio, puedes invocar el comando Artisan folio:list
:
php artisan folio:list
Puedes 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 que sea accesible a través de /user/profile
, crea una plantilla profile.blade.php
dentro del directorio pages/user
:
php artisan make:folio user/profile # pages/user/profile.blade.php → /user/profile
A veces, puedes desear hacer que una página dada sea el "índice" de un directorio. Al colocar una plantilla index.blade.php
dentro de un directorio de Folio, cualquier solicitud a la raíz de ese directorio se dirigirá 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
A menudo, necesitarás tener segmentos de la URL de la solicitud entrante inyectados en tu página para que puedas interactuar con ellos. Por ejemplo, es posible que necesites acceder al "ID" del usuario cuyo perfil se está mostrando. Para lograr esto, puedes encapsular un segmento del nombre de archivo de la página entre corchetes:
php artisan make:folio "users/[id]" # pages/users/[id].blade.php → /users/1
Los segmentos capturados se pueden acceder como variables dentro de tu plantilla Blade:
<div> User {{ $id }}</div>
Para capturar varios segmentos, puedes agregar tres puntos ...
como prefijo al segmento encapsulado:
php artisan make:folio "users/[...ids]" # pages/users/[...ids].blade.php → /users/1/2/3
Cuando capturas varios segmentos, los segmentos capturados se inyectarán en la página como un array:
<ul> @foreach ($ids as $id) <li>User {{ $id }}</li> @endforeach</ul>
Si un segmento de comodín del nombre de la plantilla de tu página se corresponde con uno de los modelos Eloquent de tu aplicación, Folio aprovechará automáticamente las capacidades de enlace de modelos de ruta de Laravel e intentará inyectar la instancia del modelo resuelto en tu página:
php artisan make:folio "users/[User]" # pages/users/[User].blade.php → /users/1
Los modelos capturados se pueden acceder como variables dentro de tu plantilla Blade. El nombre de la variable del modelo se convertirá a "camel case":
<div> User {{ $user->id }}</div>
A veces, puedes desear resolver modelos Eloquent vinculados usando una columna que no sea id
. Para hacerlo, puedes especificar la columna en el nombre de archivo de la página. Por ejemplo, una página con el nombre de archivo [Post:slug].blade.php
intentará resolver el modelo vinculado a través de la columna slug
en lugar de la columna id
.
En Windows, debes usar -
para separar el nombre del modelo de la clave: [Post-slug].blade.php
.
De forma predeterminada, Folio buscará tu modelo dentro del directorio app/Models
de tu aplicación. Sin embargo, si es necesario, puedes especificar el nombre de la clase de modelo completamente cualificado en el nombre de archivo de tu plantilla:
php artisan make:folio "users/[.App.Models.User]" # pages/users/[.App.Models.User].blade.php → /users/1
De forma predeterminada, los modelos que han sido eliminados suavemente no se recuperan al resolver los enlaces de modelos implícitos. Sin embargo, si lo deseas, puedes indicarle 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>
De forma predeterminada, Folio devolverá el contenido de la plantilla Blade de la página como respuesta a la solicitud entrante. Sin embargo, puedes personalizar la respuesta invocando la función render
dentro de la plantilla de la página.
La función render
acepta un cierre que recibirá la instancia View
que está siendo renderizada por Folio, lo que te permite agregar datos adicionales a la vista o personalizar toda la respuesta. Además de recibir la instancia View
, también se proporcionarán al cierre los parámetros de la ruta adicionales o las vinculaciones de modelos:
<?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>
Puedes especificar un nombre para la ruta de una página dada utilizando la función name
:
<?php use function Laravel\Folio\name; name('users.index');
Al igual que las rutas con nombre de Laravel, puedes utilizar la función route
para generar URLs a páginas de Folio que hayan sido asignadas con un nombre:
<a href="{{ route('users.index') }}"> All Users</a>
Si la página tiene parámetros, simplemente puedes pasar sus valores a la función route
:
route('users.show', ['user' => $user]);
Puedes 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, puedes encadenar el método middleware
después de invocar el método Folio::path
.
Para especificar a qué páginas se debe aplicar el middleware, el array de middleware puede ser indexado utilizando los patrones de URL correspondientes a las páginas a las que se debe aplicar. El carácter *
se puede utilizar como comodín:
use Laravel\Folio\Folio; Folio::path(resource_path('views/pages'))->middleware([ 'admin/*' => [ 'auth', 'verified', // ... ],]);
Puedes incluir cierres en el array de middleware para definir middleware en línea y anónimo:
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); }, ],]);
Cuando uses Folio, siempre debes aprovechar las capacidades de almacenamiento en caché de rutas de Laravel. Folio escucha el comando Artisan route:cache
para asegurarse de que las definiciones de páginas de Folio y los nombres de rutas se almacenen en caché correctamente para obtener un rendimiento máximo.