Para actualizar de Laravel 6 a la versión 7 debemos realizar una serie de pasos que podrás ver a continuación. El proceso es muy sencillo y no debería tomar más de 15 minutos.
Ten en cuenta que Laravel 6 es una versión LTS, con soporte para correcciones de problemas de seguridad hasta septiembre de 2022; mientras que Laravel 7 no es LTS.
Symfony 5
Laravel 7 actualizó sus componentes internos de Symfony a la serie 5.x, que ahora es la nueva versión mínima compatible.
Actualizando dependencias
En el archivo composer.json actualiza las dependencias del framework a ^7.0
, de la siguiente forma:
"laravel/framework": "^7.0"
También debes editar la dependencia del paquete nunomaduro/collision a ^4.1
:
"nunomaduro/collision": "^4.1"
Además, deberás actualizar las dependencias phpunit/phpunit
a ^8.5, laravel/tinker
a ^2.0 y facade/ignition
a ^2.0.
Algunos paquetes (como Envoy o Scout) pueden tener nuevas versiones para dar soporte a Laravel 7. Es recomendable leer sus guías de actualización individuales antes de continuar.
Si estás usando paquetes de terceros comprueba que estos son compatibles con Laravel 7 antes de continuar con la actualización.
Actualizaciones relacionadas con Symfony 5
Laravel 7 utiliza la versión 5.x de los componentes de Symfony por lo que algunos cambios en tu aplicación son necesarios. Primero, los métodos report
y render
de la clase App\Exceptions\Handler de tu aplicación deben aceptar instancias de la interfaz Throwable
en lugar de instancias Exception
:
use Throwable; public function report(Throwable $exception); public function render($request, Throwable $exception);
Luego, debes actualizar la opción secure
de tu archivo de configuración config/session.php para que tenga un valor por defecto de null
y la opción same_site
para que tenga un valor por defecto de lax
:
'secure' => env('SESSION_SECURE_COOKIE', null), 'same_site' => 'lax',
Cambios en la autenticación
Todo el scaffolding de autenticación ha sido movido al repositorio laravel/ui. Si estás usando el scaffolding de autenticación de Laravel debes instalar la versión ^2.0
del paquete. Si anteriormente incluías este paquete en la porción require-dev
de tu archivo package.json ahora debes moverlo a la sección require
:
composer require laravel/ui "^2.0"
Blade
El método Blade::component
ha sido renombrado a Blade::aliasComponent
por lo cual deberás modificar los llamados a este método para que usen el nuevo nombre.
Para deshabilitar la nueva característica de etiquetas de componentes, puedes llamar al método withoutComponentTags
desde el método boot
de tu AppServiceProvider
:
use Illuminate\Support\Facades\Blade; Blade::withoutComponentTags();
Cambios en Eloquent
Laravel 7 usa un nuevo formato de serialización de fecha cuando se utiliza el método toArray
o toJson
en modelos de Eloquent. Este cambio proporciona un mejor soporte e integración con las bibliotecas de análisis de fechas de lado del cliente.
Anteriormente, las fechas se serializaban en un formato como el siguiente: 2019-12-02 20:01:00
. Las fechas serializadas con el nuevo formato aparecerán como: 2019-12-02T20:01:00.283041Z
.
Para seguir usando el comportamiento anterior puedes sobrescribir el método serializeDate
en tu modelo:
/** * Prepare a date for array / JSON serialization. * * @param \DateTimeInterface $date * @return string */ protected function serializeDate(DateTimeInterface $date) { return $date->format('Y-m-d H:i:s'); }
Otros cambios de Eloquent
Laravel 7 elimina la característica de los «tipos de Factory». Esta característica no ha sido documentada desde octubre de 2016. Si todavía usas esta característica, debes actualizar a factory states.
Rutas
Nombres de rutas únicos
Versiones anteriores de Laravel te permitían definir dos rutas diferentes con el mismo nombre. En Laravel 7 esto ya no es posible, por lo cual siempre debes proporcionar nombres únicos a tu ruta.
Las rutas con nombres duplicados pueden ocasionar comportamientos inesperados en tu aplicación.
Soporte para CORS
El intercambio de recursos de origen cruzado o CORS ahora está integrado por defecto. Si estás usando una librería de terceros para CORS ahora es recomendable usar el nuevo archivo de configuración config/cors.php
y agregar el middleware \Fruitcake\Cors\HandleCors::class a tu lista de middleware global App\Http\Kernel.
Otros cambios a tener en cuenta
- Las aserciones
assertSee
yassertDontSee
en la claseTestResponse
ahora escaparán automáticamente los valores. Si está escapando manualmente cualquier valor pasado a estas aserciones, ya no deberías hacerlo. - La regla
different
ahora fallará si falta uno de los parámetros especificados en la solicitud.
Recuerda que puedes encontrar todos los cambios en el repositorio oficial de Laravel en GitHub. Para ver fácilmente los cambios usa la herramienta de comparación de GitHub y haz clic en la pestaña «Files Changed».
Documentación de Laravel 7 en español
Pronto estará disponible la documentación de Laravel 7 al español. Si quieres colaborar con este proyecto por favor hazlo a través de esta página de Patreon. Actualmente puedes explorar la Documentación de Laravel en Español para las versiones 6 y 5.8.
Novedades de Laravel 7
Aprende algunas de las novedades disponibles en esta nueva versión de Laravel revisando nuestro nueva serie de Novedades de Laravel 7.
Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.