Introducción
Esta guía cubre los pasos para migrar la estructura antigua de aplicación (con clasesKernel y varios service providers) de Laravel 10 y anteriores al Slim Application Skeleton de Laravel 11 en adelante.
Cuándo puede ser necesario migrar
Puedes plantearte la migración en casos como los siguientes:- Quieres que la estructura del proyecto coincida con la estándar más reciente para que los nuevos miembros del equipo puedan contrastarla fácilmente con la documentación oficial.
- Quieres mantener la coherencia con paquetes o starter kits creados en Laravel 11 o posterior.
- Quieres reducir los archivos y clases de configuración heredados de la estructura antigua y simplificar tu código base.
Requisitos previos
Esta guía asume lo siguiente:- La actualización de versión de Laravel ya se ha completado (
laravel/framework ^11.0o superior). - Todos los tests existentes pasan.
- Conoces la estructura de aplicación de Laravel 11 en adelante (consulta Estructura de aplicación en Laravel 11 y posteriores).
Ejemplo de migración
A continuación se muestran los pasos para migrar únicamente la estructura de la aplicación de un proyecto creado con Laravel 10 + Breeze (stack Blade), manteniendo Breeze intacto.Sustituir bootstrap/app.php
bootstrap/app.php creaba la instancia $app y registraba los kernels. Sustitúyelo por la cadena Application::configure().Antiguo (Laravel 10):withMiddleware() y withExceptions() son el sitio donde deberás migrar la configuración de los archivos de kernel que eliminarás en el siguiente paso. De momento déjalas vacías; añadirás la configuración en pasos posteriores.Eliminar el kernel HTTP (app/Http/Kernel.php)
app/Http/Kernel.php definía los middlewares globales, los grupos de middleware y los alias de middleware.Antiguo (app/Http/Kernel.php):app/Http/Kernel.php directamente.Si tienes personalizaciones (añades o excluyes middlewares propios), migra esa configuración a withMiddleware() en bootstrap/app.php antes de eliminarlo.app/Http/Kernel.php.TrustProxies, EncryptCookies o VerifyCsrfToken también se pueden eliminar de app/Http/Middleware/. Como el framework las incorpora internamente, si no necesitas personalizarlas, sus archivos ya no hacen falta.Eliminar el kernel de consola (app/Console/Kernel.php)
app/Console/Kernel.php se encargaba de definir el schedule y de cargar automáticamente los comandos.Antiguo (app/Console/Kernel.php):app/Console/Commands/ se escanea solo, por lo que no necesitas $this->load().La definición del schedule se migra a routes/console.php o al withSchedule() de bootstrap/app.php.app/Console/Kernel.php.app/Console/. Deja los archivos de comandos tal cual y elimina únicamente el archivo de la clase Kernel.Eliminar el handler de excepciones (app/Exceptions/Handler.php)
app/Exceptions/Handler.php se encargaba de la configuración del reporte y del renderizado de excepciones.Antiguo (app/Exceptions/Handler.php):withExceptions() en bootstrap/app.php antes de eliminarlo.$dontFlash, puedes migrarlos de la misma forma.app/Exceptions/Handler.php.Eliminar RouteServiceProvider y migrar el registro de rutas
app/Providers/RouteServiceProvider.php cargaba los archivos de rutas y definía los rate limits.Antiguo (app/Providers/RouteServiceProvider.php):withRouting() en bootstrap/app.php.AppServiceProvider::boot().HOME en algún sitio, reemplázala por la URL directamente en forma de cadena o mueve la constante a AppServiceProvider.Cuando termines la migración, elimina app/Providers/RouteServiceProvider.php.Consolidar los service providers
AppServiceProvider.php.Providers a eliminar (migra su contenido a AppServiceProvider antes de borrarlos):providers de config/app.php.bootstrap/providers.php para adaptarte a la nueva estructura.bootstrap/providers.php, Laravel dará prioridad a este archivo como lista de providers al cargarlos.Actualizar la clase base de controlador
Controller de Laravel 10 usaba los traits AuthorizesRequests y ValidatesRequests. La nueva clase base de Laravel 11 es una clase abstracta simple sin esos traits.Antiguo (Laravel 10):Controller. No es necesario cambiarlo todo a la vez para que funcione.Eliminar archivos config innecesarios
config/cors.php, config/hashing.php o config/view.php que no hayas modificado respecto al valor por defecto se pueden eliminar. Mantén los que hayas cambiado.Actualizar public/index.php
Actualizar artisan
Actualizar tests/TestCase.php
CreatesApplication ya no es necesario, así que ajústalo. Puedes borrar tests/CreatesApplication.php.Actualizar .env, .env.example y phpunit.xml
CACHE_DRIVER a CACHE_STORE y se han añadido algunas entradas, así que ajústalos si es necesario.
Estos cambios pueden afectar a los archivos de config y al entorno de producción, así que hazlos con cuidado.
No es imprescindible seguir todos los cambios al pie de la letra.Comprobación de funcionamiento