Laravel 7

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 y assertDontSee en la clase TestResponse 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.

Suscríbete a nuestro boletín

Te enviaremos publicaciones con consejos útiles y múltiples recursos para que sigas aprendiendo.

Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.