Laravel 5.7

Luego del lanzamiento de la nueva versión de Laravel y conocer sus novedades es momento de actualizar nuestras aplicaciones. Esta actualización de Laravel 5.6 a 5.7 es sorprendentemente muy sencilla. Veamos a continuación:

Requisitos

Antes de realizar cualquier paso debemos confirmar que nuestra aplicación puede actualizarse a Laravel 5.7 y esto lo sabemos si:

Consejos

  • Si estás trabajando con Git, crea una nueva rama para realizar la actualización y de esta manera si ocurre algún problema que no puedas solventar, el código de tu proyecto en Laravel 5.6 estará respaldado.
  • Si estás usando pruebas automatizadas verifica que todas las pruebas pasan antes de iniciar el proceso de actualización.

Pasos para actualizar a Laravel 5.7

Ahora sí comencemos con la actualización:

Actualiza dependencias

Para ello, en el archivo composer.json actualiza las dependencias del framework a 5.7.*, esto es: "laravel/framework": "5.7.*"

Además actualiza el requerimiento de PHP a ^7.1.3.

Si estás usando Laravel Passport lo debes actualizar a 7.0"laravel/passport": "^7.0"

De igual forma, actualiza todos los paquetes de terceros consumidos por la aplicación, previa verificación de soporte para Laravel 5.7.

Por último, ejecuta en consola composer update para que se instalen las actualizaciones.

Adicionalmente, puedes instalar el Var-Dump Server de Symfony, ejecutando:

#
composer require --dev beyondcode/laravel-dump-server

Si tienes pruebas en tu aplicación es momento de ejecutarlas nuevamente para verificar que todo siga funcionando correctamente.

Mejora tus habilidades con Blade, Eloquent ORM y aprende a desarrollar módulos avanzados con Laravel

Ver más

Si tu aplicación es sencilla posiblemente éste sea el único cambio que debes realizar. Sin embargo, revisa los siguientes pasos que pueden afectar tu aplicación:

Operador or de Blade

Este operador or de Blade ha sido eliminado para usar el operador ?? (null coalescing operator) de PHP que cumple con la misma función. Es decir, en vez de {{ $foo or 'default' }} ahora debes usar {{ $foo ?? 'default' }}

Método Route::redirect

Ahora el método Route::redirect devuelve el código HTTP 302 (redirección temporal) en vez del 301 (redirección permanente). En caso de requerir realizar una redirección permanente tienes dos opciones: pasar 301 como tercer parámetro Route::redirect('/foo', '/bar', 301); o usar el nuevo método permanentRedirect como por ejemplo Route::permanentRedirect('/foo', '/bar');

Claves foráneas en SQLite

SQLite no soporta claves foráneas por tanto a partir de Laravel 5.7 lanzará una excepción cuando uses el método dropForeign en una tabla cuando estés usando SQLite. En caso de trabajar con distintos tipos de base de datos y claves foráneas tendrás que agregar un condicional usando el método DB::getDriverName() en las migraciones para evitar la excepción en SQLite.

Variables dinámicas en Mailables

Las variables que son dinámicamente pasadas a las vistas con el método with desde las clases Mailable (Illuminate\Mail\Mailable) serán automáticamente convertidas a camelCase para hacerlas consistente con las variables compartidas con el método with de Illuminate\View\View.

Método split en Collection

El método split ha sido corregido para el caso cuando el total de número de elementos en la colección original es menor que la cantidad de grupos requeridos.

Por ejemplo:

Dado collect(['a', 'b', 'c', 'd'])->split(3);

Antes devolvía: [['a', 'b'], ['c', 'd']], ahora en Laravel 5.7 devolverá [['a', 'b'], ['c'], ['d']]

Datos de una validación anidada

En versiones anteriores el método validate no devolvía los datos correctos para reglas de validación anidadas. Esto ha sido corregido en Laravel 5.7:

$data = Validator::make([
    'person' => [
        'name' => 'Taylor',
        'job' => 'Developer'
    ]
], ['person.name' => 'required'])->validate();

dump($data);

// En Laravel 5.6 y anteriores
['person' => ['name' => 'Taylor', 'job' => 'Developer']]

// En Laravel 5.7
['person' => ['name' => 'Taylor']]

Clases sustituidas

En Laravel 5.7 los macros de Carbon son manejados por la librería Carbon directamente en vez de la extensión de Laravel para la librería como se había hecho durante Laravel 5.6. Sin embargo, no hay ningún cambio que realizar pues automáticamente se actualizará la librería via Composer.

Adicionalmente, han sido eliminadas las clases:

Illuminate\Support\Debug\Dumper y Illuminate\Support\Debug\HtmlDumper

Para usar las variables dumpers nativas de Symfony:

Symfony\Component\VarDumper\VarDumper y Symfony\Component\VarDumper\Dumper\HtmlDumper.

Cambios en el repositorio laravel/laravel

Debido a que nuestro proyecto no se actualiza con respecto a las actualizaciones de este repositorio es conveniente que se revisen los cambios agregados desde aquí para añadirlos a tu proyecto. Por ejemplo, puedes copiar los archivos de public/svg para usar las nuevas páginas de errores por defecto disponibles en https://github.com/laravel/laravel/tree/master/public/svg

Otras actualizaciones

Si en tu proyecto has implementado interfaces o has sobrescrito métodos de clases del framework revisa con detenimiento la guía de actualización oficial para saber si te afecta y puedas hacer las modificaciones respectivas.

Como has podido ver la actualización no conlleva mucho trabajo, así que anímate a actualizar tu proyecto para aprovechar las novedades de Laravel 5.7.

Material relacionado

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.