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

Únete a nuestra comunidad en Discord y comparte con los usuarios y autores de Styde, 100% gratis.

Únete hoy

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