El proceso de actualización de Laravel 7 a Laravel 8 es muy sencillo y debería tomarte alrededor de 15 minutos. A continuación, te mostraremos los pasos más relevantes que debes realizar.
Si quieres aprender más sobre las novedades de Laravel 8, visita nuestra serie en video Novedades de Laravel 8.
PHP 7.3.0
En Laravel 8, la nueva versión mínima de PHP requerida es 7.3.0
.
Actualizando dependencias
En tu archivo composer.json actualiza la dependencia del framework a ^8.0:
"laravel/framework": "^8.0"
También debes actualizar la dependencia del paquete nunomaduro/collision
a ^5.0:
"nunomaduro/collision": "^5.0"
Y las dependencias de los paquetes phpunit/phpunit
a ^9.0, facade/ignition
a ^2.3.6 y guzzlehttp/guzzle
a ^7.0.1.
Algunos paquetes (como Passport o Telescope) tienen nuevas versiones para dar soporte a Laravel 8. Te recomendamos 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 8 antes de continuar con la actualización.
Además, el instalador de Laravel se actualizó a su versión ^4.0 y ahora soporta composer create-project
y Laravel Jetstream.
Los instaladores anteriores a 4.0 dejarán de funcionar después de octubre de 2020. Te recomendamos actualizar tu instalador global tan pronto como sea posible.
Cambios de Base de Datos
Los seeders y factories de Laravel ahora usan clases con espacio de nombres (namespace), por lo que debes agregar el namespace Database/Factories
en tus clases factory y Database/Seeders
en tus clases seeder.
También, debes renombrar el directorio database/seeds
a database/seeders
.
Por último, en tu archivo composer.json quita el bloque classmap
de la sección autoload
y agrega las nuevas clases con espacio de nombres:
"autoload": { "psr-4": { "App\\": "app/", "Database\\Factories\\": "database/factories/", "Database\\Seeders\\": "database/seeders/" } },
Eloquent
Los model factories han sido totalmente reescritos para soportar clases, sin embargo, esto no es compatible con el estilo de factories de Laravel 7.
Por ello, para facilitarte el proceso de actualización y que puedas seguir utilizando tus factories existentes con Laravel 8, se creó el paquete laravel/legacy-factories
, el cual puedes instalar por medio de Composer:
composer require laravel/legacy-factories
Framework
La opción --message
del comando php artisan down
ha sido eliminada.
Puedes considerar como alternativa pre-renderizar las vistas del modo de mantenimiento con el mensaje de tu preferencia.
Paginación
El paginador de Laravel ahora utiliza el framework de CSS Tailwind para su estilo de forma predeterminada. Sin embargo, si deseas seguir usando Bootstrap, puedes agregar el siguiente llamado al método boot
en tu AppServiceProvider
:
use Illuminate\Pagination\Paginator; Paginator::useBootstrap();
Colas de trabajo
El método y la propiedad retryAfter
de los trabajos de cola, los correos, las notificaciones y los listeners se han cambiado a backoff
.
Además, la propiedad timeoutAt
de los trabajos de cola, las notificaciones y los listeners también ha sido renombrada a retryUntil
.
Asegúrate de actualizar el nombre de este método y propiedades en las clases de tu aplicación.
Rutas
En versiones anteriores de Laravel, por defecto la propiedad $namespace
del RouteServiceProvider
tenía como valor App\Http\Controllers
.
Este valor fue usado como prefijo automático en las declaraciones de ruta del controlador para generar la URL de dichas rutas.
Sin embargo, en Laravel 8 esta propiedad se establece en null
de forma predeterminada, lo cual permite que las declaraciones de rutas de tus controladores utilicen la sintaxis estándar de llamadas de retorno de PHP:
use App\Http\Controllers\UserController; // Using PHP callable syntax... Route::get('/users', [UserController::class, 'index']); // Using string syntax... Route::get('/users', 'App\Http\Controllers\UserController@index');
Normalmente esto no afectará tus aplicaciones cuando las actualices, pues la propiedad $namespace
conservará su valor anterior. Sin embargo, si estás actualizando tu aplicación mediante la creación de un nuevo proyecto, recuerda aplicar este cambio.
En los casos donde desees continuar utilizando el enrutamiento del controlador con el prefijo automático original, establece el valor de la propiedad $namespace
dentro de tu RouteServiceProvider
y actualiza los registros de rutas dentro del método boot
para usar esta propiedad.
Pruebas
El método assertExactJson
requiere que las claves numéricas de los arreglos comparados coincidan y estén en el mismo orden.
Puedes usar el método assertSimilarJson
si deseas comparar un JSON con un arreglo sin necesidad de requerir que los arreglos con clave numérica tengan el mismo orden.
Otros cambios a tener en cuenta
- El modo de mantenimiento de Laravel ha sido mejorado en Laravel 8 y ahora admite pre-renderizar la plantilla, eliminando la posibilidad de que tus usuarios encuentren errores durante el modo de mantenimiento.
- Si planeas utilizar las características de procesamiento por lotes de trabajos de Laravel 8, debes actualizar la tabla de trabajos fallidos en la base de datos de tu aplicación.
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».
Material Relacionado
Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.