🎃 12 meses por 75 €

El plan anual a mitad de precio hasta el 31 de octubre.

Aprovechar la oferta

🎃 Halloween: 12 meses por 75 €

Plan anual a mitad de precio, para altas y renovaciones. Solo hasta el 31 de octubre.
Aprovechar la oferta
Saltar al contenido
Curso Actualizar un proyecto de Laravel 10 a Laravel 11
11/13 La estructura nueva de Laravel 11 Migrar a la estructura de Laravel 11: bootstrap/app.php, middleware y rutas sin Kernel
Tu lectura Quedan 20 min
Lección 11 de 13 · La estructura nueva de Laravel 11

Migrar a la estructura de Laravel 11: bootstrap/app.php, middleware y rutas sin Kernel

20 min de lectura Laravel 11

Hola, bienvenido. En esta lección empieza la tercera sección, la migración a la estructura nueva de Laravel 11, y vamos a sustituir app/Http/Kernel.php y app/Exceptions/Handler.php por bootstrap/app.php. En Laravel 11, las rutas, los middleware y las excepciones se configuran en bootstrap/app.php con withRouting(), withMiddleware() y withExceptions(), y los 9 middleware que el esqueleto de Laravel 10 copiaba en app/Http/Middleware pasan a vivir en el framework. Por eso un proyecto nuevo de Laravel 11 no tiene Kernel.php.

Antes de empezar, lo que dice la guía oficial, tal cual: "we do not recommend that Laravel 10 applications upgrading to Laravel 11 attempt to migrate their application structure, as Laravel 11 has been carefully tuned to also support the Laravel 10 application structure". Es decir, no recomienda migrar la estructura, y tiene razón en lo técnico: el proyecto funciona en Laravel 11 tal como lo dejamos en la lección anterior. Entonces, ¿por qué lo vamos a hacer? Porque toda la documentación de Laravel 11 en adelante habla de bootstrap/app.php, y en un proyecto con la estructura de Laravel 10 cada ejemplo hay que traducirlo: dónde se registra un alias de middleware, dónde se excluye una ruta del CSRF, dónde se programa una tarea. Quien se incorpore al equipo buscará bootstrap/app.php, y es también lo que hace Laravel Shift cuando actualiza un proyecto a Laravel 11. Si prefieres no hacerlo, el tag laravel-11-estructura-antigua es tu punto final, y no pasa nada.

Dónde estaba cada cosa en Laravel 10 y dónde está en Laravel 11

Esta tabla resume el cambio completo, lección a lección:

En Laravel 10 En Laravel 11 Lección
app/Http/Kernel.php: middleware globales, grupos web y api, alias withMiddleware() en bootstrap/app.php: el framework ya incluye los globales y los grupos, y solo se escribe lo que cambia 11
Los 9 middleware de app/Http/Middleware Las clases del framework, que se configuran con métodos como validateCsrfTokens() 11
app/Exceptions/Handler.php withExceptions() en bootstrap/app.php 11
RouteServiceProvider carga routes/web.php y routes/api.php withRouting() en bootstrap/app.php 11
public/index.php y artisan crean los Kernels a mano handleRequest() y handleCommand() 11
Los providers del proyecto, en config/app.php bootstrap/providers.php 12
app/Console/Kernel.php: la tarea programada routes/console.php, con la fachada Schedule 13

El centro de todo es una llamada: Application::configure(). Nuestro bootstrap/app.php de Laravel 10 crea la aplicación con new Application y registra a mano los 2 Kernels y el Handler. El de Laravel 11 usa Application::configure(), que registra los Kernels y el Handler del framework y, además, sus propios providers de rutas y de eventos. Fíjate en lo que implica: en cuanto cambiemos bootstrap/app.php, nuestro Kernel HTTP, nuestro Handler y también nuestro Kernel de consola dejan de usarse, aunque sigan en el proyecto. Lo que hacían tiene que estar en bootstrap/app.php o en otro sitio que Laravel 11 lea, y por eso esta lección no termina al escribir el archivo nuevo: después vamos a comprobar qué ha dejado de funcionar y por qué.

Si quieres ver la estructura nueva desde cero, sin una migración de por medio, tienes el artículo Sumérgete en la estructura de directorios en Laravel 11 (se abre en una pestaña nueva).

Lo que queda de esta lección
  1. 02El bootstrap/app.php nuevo
  2. 03Los 9 middleware de app/Http/Middleware
  3. 04public/index.php y artisan
  4. 05El Kernel de consola, hasta la lección 13
  5. 06Los listeners de Registered, registrados 2 veces
  6. 07Los tests, sin Kernel HTTP
Sigue leyendo con tu suscripción El curso completo, con el certificado y el foro, está incluido en la suscripción. Ver los planes