Actualizar un proyecto de Laravel 10 a Laravel 11
Actualiza paso a paso un proyecto real de Laravel 10 a Laravel 11, desde las dependencias hasta la estructura nueva sin Kernels.
- Lecciones
- 13
- Lectura
- 206 min
- Nivel
- Intermedio
- Actualizado
- 01 El proyecto Laravel 10 de partida que vamos a actualizar a Laravel 11
- 02 Tests y Larastan antes de actualizar Laravel: la red de seguridad
- 03 composer outdated y composer why-not: qué bloquea la actualización a Laravel 11
- 04 Cambiar la versión de PHP en Laravel Sail: de PHP 8.1 a PHP 8.2
Hola, bienvenido. Empezamos un nuevo curso en CursosDesarrolloWeb.es, en el que vamos a actualizar un proyecto real de Laravel 10 a Laravel 11, paso a paso, con sus tests y Larastan comprobando cada cambio.
La guía oficial dice que la actualización lleva 15 minutos, y para el esqueleto de Laravel es cierto. Pero un proyecto real no es el esqueleto. El de este curso, por ejemplo, tiene Breeze, un paquete de roles, una API con tokens y migraciones de hace años, como muchos proyectos que siguen en Laravel 10. Y Laravel 10 no recibe parches de seguridad desde febrero de 2025, así que tarde o temprano esos proyectos hay que actualizarlos.
Qué vamos a hacer
Vamos a trabajar sobre un proyecto de tickets de soporte con Breeze, Sanctum, Spatie Permission y Livewire. Está en GitHub, partiremos de su versión en Laravel 10 y lo iremos actualizando juntos, con un commit por lección. Este es el orden que seguiremos:
- Primero dejaremos en verde sus tests, Larastan y Pint, que serán los que nos avisen de cada fallo.
composer outdatedycomposer why-notnos dirán qué paquetes bloquean la actualización y cuáles no.- El siguiente paso será subir PHP de 8.1 a 8.2 en Laravel Sail, todavía en Laravel 10, para que si algo falla sepamos que es por PHP.
- Con eso hecho, actualizaremos
composer.jsona Laravel 11. Composer, desde la versión 2.9, no permite instalarlo por sus avisos de seguridad, y verás cómo resolverlo sin desactivar esa protección. - Después veremos, uno por lección, los cambios que afectan al proyecto: Spatie Permission 6, Sanctum 4, las migraciones que modifican columnas y Carbon 3, que devuelve decimales donde el código esperaba enteros.
- Usaremos Rector y
rector-laravelpara aplicar los cambios mecánicos del código, como pasar$castsal métodocasts(). - Y al final, como paso opcional, pasaremos el proyecto a la estructura nueva de Laravel 11, sin
Kernel.php, sinHandler.phpy sin los providers de Laravel 10.
En cada lección verás el error que aparece, por qué aparece y cómo se soluciona. Como todos los cursos de la plataforma, es un curso súper pragmático: de la guía oficial aplicaremos solo lo que afecta al proyecto.
El stack
Al terminar el curso, el proyecto estará en Laravel 11, sobre PHP 8.2, con Laravel Sail y Composer 2.10. Los paquetes que se actualizan son Laravel Sanctum 4, Laravel Breeze 2, Spatie Permission 6 y Livewire 3. Las comprobaciones se hacen con Pest 2 y Larastan 2, y los cambios de código con Rector 1.2 y rector-laravel 1.2. El proyecto tiene un tag en GitHub por cada estado del curso, así que en cualquier momento podrás comparar lo que llevas hecho con el tag que corresponde.
Lo que no cubre
Este curso no repasa las novedades de Laravel 11: para eso tienes el artículo Novedades en Laravel 11 (se abre en una pestaña nueva). Tampoco usa Laravel Shift ni enseña Rector como herramienta general. Y si tu proyecto lleva Filament, el panel tiene su propia actualización en el curso Upgrade de Filament PHP 3 a 4 (se abre en una pestaña nueva).
Para quién es
Este curso es para ti si mantienes un proyecto Laravel 10 en producción, tuyo o de un cliente, y tienes que subirlo de versión. Necesitas manejarte con Laravel, Composer y Git en tu día a día, y también con Docker y Laravel Sail, porque durante el curso cambiaremos la versión de PHP del contenedor. Si Sail no te suena, te recomiendo que antes pases por el curso Docker y Laravel Sail desde cero (se abre en una pestaña nueva).
Así que, si te interesa, te espero dentro del curso. Espero que te haya gustado esta introducción. Un saludo.