🎃 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 12 a Laravel 13
05/08 La actualización a Laravel 13 Actualizar composer.json a Laravel 13 y aplicar la guía oficial: PreventRequestForgery
Tu lectura Quedan 17 min
Lección 5 de 8 · La actualización a Laravel 13

Actualizar composer.json a Laravel 13 y aplicar la guía oficial: PreventRequestForgery

17 min de lectura Laravel 13

Hola, bienvenido. En esta lección vamos a actualizar el proyecto de Laravel 12 a Laravel 13. Con PHP 8.3, Pest 4 y Tinker 3 ya instalados, basta con cambiar una línea del archivo composer.json: ^12.0 pasa a ^13.0. Después revisaremos la guía oficial, y de todo lo que cambia a nuestro código solo le afecta una cosa: el middleware de CSRF, que pasa a llamarse PreventRequestForgery.

Laravel 13 en composer.json

Como vimos con composer why-not en la lección 2, el resto de paquetes ya admite Laravel 13, así que vamos a cambiar solo la restricción de laravel/framework en composer.json:

composer.json Modificado +1 −1
7 "require": {
8 "php": "^8.3",
9 "guzzlehttp/guzzle": "^7.2",
− "laravel/framework": "^12.0",
+ "laravel/framework": "^13.0",
11 "laravel/sanctum": "^4.0",
12 "laravel/tinker": "^3.0",
13 "livewire/livewire": "^3.4",

Vamos a resolver las dependencias con -W, como en las 2 lecciones anteriores. Esta es la salida el 21 de octubre de 2026 (las versiones serán más nuevas cuando lo lances tú):

Terminal
sail composer update -W
Salida
Loading composer repositories with package information Updating dependencies Lock file operations: 1 install, 3 updates, 0 removals - Upgrading brick/math (0.14.8 => 1.0.0) - Upgrading guzzlehttp/uri-template (v1.0.11 => v2.0.1) - Upgrading laravel/framework (v12.70.1 => v13.38.0) - Locking symfony/polyfill-php86 (v1.43.0) Writing lock file Installing dependencies from lock file (including require-dev) Package operations: 1 install, 3 updates, 0 removals ... > @php artisan vendor:publish --tag=laravel-assets --ansi --force INFO No publishable resources for tag [laravel-assets]. No security vulnerability advisories found.

4 paquetes, y los 4 llegan por Laravel:

  • Laravel 13.38, la última versión de la rama 13.x ese día, sin avisos de seguridad.
  • symfony/polyfill-php86, una dependencia nueva que añade a PHP 8.3 lo que llegará con PHP 8.6, como la función clamp(), la función grapheme_strrev() o la constante ARRAY_FILTER_USE_VALUE. Solo las define si PHP no las tiene ya.
  • brick/math 1.0 y guzzlehttp/uri-template 2. Laravel ya las usaba, la primera para los casts decimales de Eloquent y la segunda para las URL con parámetros del cliente HTTP, y Laravel 13 admite sus versiones major nuevas, así que -W las actualiza.

La guía oficial avisa de otro polyfill, symfony/polyfill-php85, que define funciones globales como array_first() y array_last() y que puede entrar en conflicto con helpers propios que se llamen igual. La guía lo presenta como una dependencia nueva de Laravel 13, pero en la salida no aparece porque ya estaba instalado: las últimas versiones de Laravel 12, como la 12.70, ya lo instalan. Y el proyecto no define funciones con esos nombres ni con los de polyfill-php86: si buscas function array_first, function array_last o function clamp en app/, routes/, database/ y tests/, no encuentras nada.

Vamos a comprobar con qué versión arranca el proyecto:

Terminal
sail artisan about --only=environment
Salida
Environment ................................................................ Application Name ................................................... Tickets Laravel Version .................................................... 13.38.0 PHP Version ......................................................... 8.3.36 Composer Version .................................................... 2.10.3 ...

Laravel 13 sobre PHP 8.3, sin haber cambiado una línea de código. Vamos a lanzar composer qa para comprobar que todo sigue en verde:

Terminal
sail composer qa
Salida
PASS Tests\Unit\SlaTest ✓ the due date depends on the priority with dataset "high" 0.02s ... Tests: 82 passed (175 assertions) Duration: 5.79s Note: Using configuration file /var/www/html/phpstan.neon. 66/66 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100% [OK] No errors ............................................................................ ............................... ──────────────────────────────────────────────────────────────────── Laravel PASS ......................................................... 107 files

Los tests en verde nos dicen que nada ha dejado de funcionar, pero ¿qué ha cambiado en el framework? Eso lo cuenta la guía oficial.

Lo que queda de esta lección
  1. 02Qué cambios de la guía de Laravel 13 afectan al proyecto
  2. 03VerifyCsrfToken pasa a llamarse PreventRequestForgery
  3. 04preventRequestForgery() en bootstrap/app.php
  4. 05ValidateCsrfToken en config/sanctum.php: obsoleta, pero sin aviso
  5. 06Qué puede bloquear la comprobación de origen
  6. 07composer 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