🎃 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
10/13 La actualización a Laravel 11 Rector con rector-laravel: aplicar el set de Laravel 11 al código
Tu lectura Quedan 23 min
Lección 10 de 13 · La actualización a Laravel 11

Rector con rector-laravel: aplicar el set de Laravel 11 al código

23 min de lectura Laravel 11

Hola, bienvenido. En esta lección vamos a poner al día el código que sigue funcionando con Laravel 11, pero que ya no se escribe así, con Rector y su extensión para Laravel, rector-laravel. Rector es una herramienta que reescribe código PHP aplicando reglas, y rector-laravel incluye esas reglas agrupadas por versión de Laravel: su set de Laravel 11, por ejemplo, convierte la propiedad $casts de los modelos en el método casts(), que es la forma de declarar los casts que estrena Laravel 11.

¿Qué hace Rector que no haga la guía oficial? La guía te dice qué ha cambiado, y Rector lo aplica: recorre todos los archivos, encuentra cada sitio con el patrón anterior y lo reescribe igual en todos. En este proyecto son 4 modelos, pero en uno grande pueden ser 200, y ahí se nota la diferencia entre hacerlo a mano y que lo haga Rector. Eso sí, que lo haga Rector no significa darlo por bueno sin mirarlo, así que vamos a ver lo que propone antes de aplicarlo.

Instalar Rector y rector-laravel

Rector y rector-laravel son herramientas de desarrollo, así que se instalan en require-dev. Vamos a instalarlos sin indicar versión, para que Composer elija la más nueva que encaje con el proyecto. Esta es la salida el 21 de octubre de 2026 (las versiones pueden cambiar cuando lo lances tú):

Terminal
sail composer require rector/rector driftingly/rector-laravel --dev
Salida
Cannot use driftingly/rector-laravel's latest version 2.7.0 as it requires php >=8.3 which is not satisfied by your platform. ./composer.json has been updated Running composer update rector/rector driftingly/rector-laravel Loading composer repositories with package information Updating dependencies Lock file operations: 2 installs, 0 updates, 0 removals - Locking driftingly/rector-laravel (1.2.6) - Locking rector/rector (1.2.10) Writing lock file Installing dependencies from lock file (including require-dev) Package operations: 2 installs, 0 updates, 0 removals - Downloading rector/rector (1.2.10) - Downloading driftingly/rector-laravel (1.2.6) - Installing rector/rector (1.2.10): Extracting archive - Installing driftingly/rector-laravel (1.2.6): Extracting archive Generating optimized autoload files ... Found 4 security vulnerability advisories affecting 1 package. Run "composer audit" for a full list of advisories. Using version ^1.2 for rector/rector Using version ^1.2 for driftingly/rector-laravel

Composer ha instalado Rector 1.2 y rector-laravel 1.2, y no las versiones 2, que son las actuales. La primera línea explica una parte: la última versión de rector-laravel, la 2.7, exige PHP 8.3, y el contenedor tiene PHP 8.2. Pero la versión 2.5 todavía admite PHP 8.2 y tampoco la ha elegido. ¿Por qué? Porque todas las versiones 2 de rector-laravel necesitan Rector 2, y Rector 2 necesita PHPStan 2. Para saber quién fija PHPStan en el proyecto, vamos a utilizar composer why, que es lo contrario del why-not de la lección 3: en vez de qué impide instalar una versión, dice qué paquetes exigen uno que ya está instalado.

Terminal
sail composer why phpstan/phpstan
Salida
larastan/larastan v2.11.2 requires phpstan/phpstan (^1.12.17) rector/rector 1.2.10 requires phpstan/phpstan (^1.12.5)

Es Larastan 2, el mismo que usamos para el análisis estático, y Larastan 3, que usa PHPStan 2, llega con la actualización a Laravel 12, como vimos en la lección 2. Así que Composer ha hecho lo correcto: la rama 1.2 de rector-laravel tiene el set de Laravel 11, que es el único que necesitamos ahora.

Fíjate también en la tercera línea: Composer solo actualiza los 2 paquetes nuevos y lo que ellos necesitan, sin tocar laravel/framework. Por eso el bloqueo por avisos de seguridad de la lección 5 no aparece, y los 4 avisos que cuenta al final son los de Laravel 11 que dejamos ignorados para el bloqueo en esa misma lección. Así queda composer.json, con las 2 restricciones que ha añadido Composer:

composer.json Modificado +2
14 "spatie/laravel-permission": "^6.0"
15 },
16 "require-dev": {
+ "driftingly/rector-laravel": "^1.2",
18 "fakerphp/faker": "^1.9.1",
19 "larastan/larastan": "^2.9",
20 "laravel/breeze": "^2.0",
24 "nunomaduro/collision": "^8.1",
25 "pestphp/pest": "^2.0",
26 "pestphp/pest-plugin-laravel": "^2.4",
+ "rector/rector": "^1.2",
28 "spatie/laravel-ignition": "^2.0"
29 },
30 "autoload": {
Lo que queda de esta lección
  1. 02El archivo rector.php
  2. 03Lo que propone Rector
  3. 04Aplicar los cambios
  4. 05Larastan no lee los casts del método casts()
  5. 06composer qa en verde y el commit
Sigue leyendo con tu suscripción El curso completo, con el certificado y el foro, está incluido en la suscripción. Ver los planes