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:
- La aplicación está desarrollada en Laravel 5.6. En caso contrario, debes actualizarla a esa versión.
- Confirmar que los paquetes de terceros usados en la aplicación pueden trabajar con Laravel 5.7.
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.
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
- Guía de actualización oficial de Laravel
- ¡Laravel 5.7 ya está aquí!
- Videotutorial: actualiza tu aplicación de Laravel 5.6 a Laravel 5.7
Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.