Novedades en Laravel 10

arrow_back Blog

El 14 de febrero de 2023 fue liberado Laravel 10, la nueva versión de nuestro framework PHP favorito.

En esta entrada te voy a detallar todas las novedades en Laravel 10 para que no te pierdas absolutamente nada de esta nueva versión, empecemos.

Programación de lanzamientos para Laravel

Antes de Laravel 9, las principales versiones del framework se lanzaban dos veces al año, aproximadamente cada seis meses. Con la llegada de Laravel 9, el equipo del framework siguió un cronograma anual, enviando Laravel 9 en febrero de 2022 (en lugar de septiembre de 2021 planeado originalmente).

A continuación tienes un pequeño cronograma de las liberaciones y futuras liberaciones de Laravel:

  • Laravel 9: 8 de febrero de 2022

  • Laravel 10: 14 de febrero de 2023

  • Laravel 11: primer trimestre de 2024

Laravel 9 continuará recibiendo correcciones de errores hasta el 8 de agosto de 2023 y correcciones de seguridad hasta el 14 de febrero de 2024.

Podemos esperar correcciones de errores de Laravel 10 hasta el 6 de agosto de 2024 y correcciones de seguridad hasta el 14 de febrero de 2025.

Ahora que tenemos algo de contexto acerca de las actualizaciones de Laravel Framework, veamos algunas de sus novedades más importantes.

Requisitos para crear un nuevo proyecto en Laravel 10

Para crear un nuevo proyecto con Laravel 10 deberás tener instalado PHP 8.1 o superior, aunque si trabajas con Laravel Sail esto no será un problema. Además de PHP, deberás tener instalado Composer en tu sistema.

Primer proyecto con Laravel 10 y Composer

Después de haber instalado PHP y Composer, puedes crear un nuevo proyecto Laravel 10 utilizando el comando create-project de Composer de la siguiente forma:

Donde laravel-10-project será el nombre de nuestro proyecto.

Si revisas el archivo composer.json tendrás que ver lo siguiente en la clave require:

Primer proyecto con Laravel 10 y el instalador de Laravel

Alternativamente a Composer, podemos instalar y utilizar el instalador de Laravel a través de Composer de la siguiente forma:

Para crear un nuevo proyecto Laravel 10 con el instalador de Laravel sólo deberás ejecutar el siguiente comando:

Con el comando about de artisan podremos ver la información de nuestro proyecto:

Laravel Pennant

Sin duda una gran herramienta para el desarrollo de pruebas A/B. Laravel Pennant nos ayudará al momento de añadir nuevas features (características) a nuestros proyectos Laravel fácilmente, no te pierdas el curso completo de Laravel Pennant.

Nuevo Process Layer

En Laravel hace mucho tiempo que tenemos a nuestra disposición el cliente Http. Una de las novedades en Laravel 10 es la nueva fachada Process, la cual trabaja con la misma API que el cliente Http y nos permitirá hacer cosas como lo siguiente:

Flag --profile en los tests

Con la meta de encontrar los tests que puedan ser más lentos al momento de ejecutar nuestros tests, Laravel 10 nos ofrece el flag --profile:

Gracias a este nuevo flag podremos tener información valiosa acerca de la ejecución de nuestros tests.

Prompts en todos los comandos

En Laravel 10 todos los comandos que requieran de datos son interactivos y nos pedirán toda la información que necesiten, mira el siguiente ejemplo para crear un nuevo controlador en Laravel 10:

Nuevo Helper password en la clase Str

Un nuevo Helper llamado password aparece en Laravel 10, gracias a este nuevo Helper podremos crear contraseñas seguras con una línea de código.

Soporte nativo para modificar columnas

En Laravel 10 ya no es necesario instalar el paquete doctrine/dbal para modificar columnas en MySQL, PostgreSQL y SQL, lo siguiente funcionará sin la necesidad de instalar nada:

Pest scaffolding

En Laravel 10, al momento de crear un nuevo proyecto con el instalador de Laravel, podemos seleccionar tests con Pest de la siguiente forma:

Si todavía no conoces Pest, no te pierdas nuestro curso de refactorización.

Reglas de validación invokables por defecto

Si creamos una regla de validación con Laravel 9 utilizando el siguiente comando:

Veremos el siguiente código en la clase Rule:

Mientras que si hacemos lo mismo en Laravel 10, veremos una clase invokable con el siguiente código:

Tipos nativos en el Skeleton y los paquetes oficiales de Laravel 10

Mientras que en Laravel 9 y sus versiones anteriores todos los tipos estaban definidos con DocBlocks, en Laravel 10 todo tendrá tipos, tanto los datos como los retornos, y los DocBlocks serán eliminados.

Ejemplo controlador en Laravel 9:

Ejemplo controlador en Laravel 10:

Y así será con todo, migraciones, Kernel Http o de Consola etcétera, aquí puedes ver el pull request: [10.x] Uses PHP Native Type Declarations.

Localización

En Laravel 10, el directorio lang que en versiones anteriores aparecía en la raíz del proyecto ya no se incluye por defecto, para que aparezca, es necesario ejecutar el siguiente comando:

Con el comando anterior el directorio lang volverá a estar en su sitio.

Eliminado soporte para Predis v1

Predis v1 dejará de tener soporte en Laravel 10, las opciones que tenemos son utilizar Predis v2 o directamente optar por utilizar la extensión nativa Redis, aquí puedes ver el pull request: [10.x] Drop Predis v1 support.


Actualizar a Laravel 10

Vamos a ver cómo actualizar a Laravel 10. Todo proceso de actualización en Laravel conlleva cierta dificultad, la cual está segmentada en diferentes niveles.

Si estás pensando en actualizar a una versión posterior de tu aplicación Laravel, te recomiendo que consideres Laravel Shift.

Alto impacto

  • Actualizar dependencias

  • Actualizar estabilidad mínima

Medio Impacto

  • Expresiones de base de datos

  • Propiedad $dates de los modelos

  • Monolog 3

  • Etiquetas caché Redis

  • MocksApplicationServices

  • El directorio lang

Bajo impacto

  • Closure en mensajes de reglas de validación

  • Enlace de la carpeta public

  • Constructor Illuminate\Database\QueryException

  • Valores de retorno del Rate Limiter

  • Relación método getBaseQuery

  • El método Redirect::home

  • El método Bus::dispatchNow

  • El método registerPolicies

  • Columnas ULID


Actualización de dependencias

Impacto: alto

PHP 8.1.0 Requerido

Laravel ahora requiere PHP 8.1.0 o superior.

Composer 2.2.0 requerido

Laravel ahora requiere Composer 2.2.0 o superior.

Dependencias de Composer

Debes actualizar las siguientes dependencias en el archivo composer.json de tu aplicación:

Opcionalmente, si deseas utilizar PHPUnit 10, debes eliminar el atributo processUncoveredFiles de la sección <coverage> del archivo de configuración phpunit.xml de tu aplicación. A continuación, actualiza las siguientes dependencias en el archivo composer.json de tu aplicación:

Finalmente, examina cualquier otro paquete de terceros utilizado por tu aplicación y verifica que esté usando la versión adecuada para la compatibilidad con Laravel 10.

Estabilidad mínima

Debes actualizar la configuración de estabilidad mínima en el archivo composer.json de tu aplicación a estable:

Application

Enlace de la carpeta public

Impacto: bajo

Si tu aplicación está personalizando su "ruta pública" vinculando path.public en el contenedor, en su lugar, debes actualizar tu código para invocar el método usePublicPath ofrecido por el objeto Illuminate\Foundation\Application:

Authorization

El método registerPolicies

Impacto: bajo

Laravel 10 ahora invoca automáticamente el método registerPolicies del AuthServiceProvider. Por lo tanto, puedes eliminar la llamada a este método desde el método de boot del AuthServiceProvider de tu aplicación.

Cache

Etiquetas caché Redis

Impacto: medio

La compatibilidad con las etiquetas de caché de Redis se ha reescrito para mejorar el rendimiento y la eficiencia del almacenamiento. En versiones anteriores de Laravel, las etiquetas de caché obsoletas se acumulaban en el caché al usar Redis como controlador de caché de tu aplicación. Sin embargo, para purgar correctamente las entradas de etiquetas de caché obsoletas, el nuevo comando Artisan de Laravel cache:prune-stale-tags debe programarse en la clase App\Console\Kernel de tu aplicación:

Base de datos

Expresiones de base de datos (Métodos raw)

Impacto: medio

Las "expresiones" de la base de datos (generalmente generadas a través de DB::raw) se han reescrito en Laravel 10.x para ofrecer funcionalidad adicional en el futuro. En particular, el valor de cadena sin procesar de la gramática ahora debe recuperarse a través del método getValue (Grammar $grammar) de la expresión. Ya no se admite la conversión de una expresión a una cadena usando (cadena).

Normalmente, esto no afecta a las aplicaciones de usuario final; sin embargo, si tu aplicación convierte manualmente expresiones de base de datos en cadenas usando (string) o invocando el método __toString en la expresión directamente, deberás actualizar tu código para invocar el método getValue en su lugar:

Constructor Illuminate\Database\QueryException

Impacto: bajo

El constructor Illuminate\Database\QueryException ahora acepta un nombre de conexión de cadena como su primer argumento. Si tu aplicación lanza manualmente esta excepción, debes ajustar su código en consecuencia.

Columnas ULID

Impacto: bajo

Cuando las migraciones invoquen el método ulid sin ningún argumento, la columna ahora se llamará ulid. En versiones anteriores de Laravel, al invocar este método sin ningún argumento se creaba una columna con el nombre erróneo de uuid:

Para especificar explícitamente un nombre de columna al invocar el método ulid, puedes pasar el nombre de la columna al método:

Eloquent

Propiedad $dates

Impacto: medio

Se ha eliminado la propiedad obsoleta $dates de los modelos Eloquent. Tu aplicación ahora debería usar la propiedad $casts:

Relación método getBaseQuery

Impacto: bajo

El método getBaseQuery en la clase Illuminate\Database\Eloquent\Relations\Relation ha cambiado de nombre a toBase.

Localización

El directorio lang

Impacto: ninguno

Aunque no es relevante para las aplicaciones existentes, el esqueleto de la aplicación Laravel ya no contiene el directorio lang de forma predeterminada. En cambio, al escribir nuevas aplicaciones de Laravel, se pueden publicar usando el comando lang:publish de Artisan:

Logging

Monolog 3

Impacto: medio

La dependencia Monolog de Laravel se ha actualizado a Monolog 3.x. Si estás interactuando directamente con Monolog dentro de tu aplicación, debes revisar la guía de actualización de Monolog. Si estás utilizando servicios de registro de terceros, como BugSnag o Rollbar, es posible que debas actualizar esos paquetes de terceros a una versión compatible con Monolog 3.x y Laravel 10.x.

Queues

El método Bus::dispatchNow

Impacto: bajo

Los métodos obsoletos Bus::dispatchNow y dispatch_now se han eliminado. En su lugar, tu aplicación debe usar los métodos Bus::dispatchSync y dispatch_sync, respectivamente.

Routing

Middleware Alias

Impacto: opcional

En las nuevas aplicaciones de Laravel, la propiedad $routeMiddleware de la clase App\Http\Kernel ha sido renombrada a $middlewareAliases para reflejar mejor su propósito. Laravel nos propone cambiar el nombre de esta propiedad en nuestras aplicaciones existentes; sin embargo, no es necesario.

Valores de retorno del Rate Limiter

Impacto: bajo

Al invocar el método RateLimiter::attempt, el método devolverá el valor devuelto por el cierre proporcionado. Si no se devuelve nada o null, el método attempt devolverá true:

El método Redirect::home

Impacto: bajo

Se eliminó el método obsoleto Redirect::home. En su lugar, tu aplicación debe redirigir a una ruta nombrada explícitamente:

Testing

MocksApplicationServices

Impacto: medio

El trait obsoleto MocksApplicationServices ha sido eliminado en Laravel 10. Este trait exponía métodos de testing como expectsEvents, expectsJobs y expectsNotifications. Si tu aplicación utiliza estos métodos, la recomendación es que realices la transición a Event::fake, Bus::fake y Notification::fake, respectivamente. Puedes obtener más información sobre MocksApplicationServices a través de fakes en la documentación correspondiente del componente que estás intentando falsear.

Validación

Closure en mensajes de reglas de validación

Impacto: bajo

Al escribir reglas de validación personalizadas basadas en el cierre, el invocar a $fail más de una vez ahora agregará los mensajes a una matriz en lugar de sobrescribir el mensaje anterior. Por lo general, esto no afectará tu aplicación. Además, la closure $fail ahora devuelve un objeto. Si anteriormente estabas indicando el tipo de devolución de su closure, esto puede requerir que actualices su tipo:

¿Debo actualizar a Laravel 10?

No es necesario actualizar a Laravel 10 a no ser que la nueva versión tenga alguna característica que realmente sea interesante para nuestro proyecto, como por ejemplo Laravel Pennant.

Un buen motivo para querer actualizar es que deseemos utilizar algún paquete que sólo soporte Laravel 10.

Ten en cuenta que Laravel 9 sigue en plena forma:

  • Corrección de errores hasta el 8 de agosto de 2023

  • Correcciones de seguridad hasta el 6 de febrero de 2024

Crear un nuevo proyecto con Laravel 11

La próxima versión de Laravel ya puede ser instalada en nuestro equipo. Para crear un nuevo proyecto con Laravel 11, podemos hacer lo siguiente:


Estas son muchas de las novedades en Laravel 10, espero que te hayan ayudado a conocer lo que tenemos disponible en esta nueva versión de Laravel para llevar tus proyectos al siguiente nivel.

Si quieres desarrollar tu primera aplicación con Laravel 10, ¡no te pierdas el curso de Laravel 10!

Cursosdesarrolloweb Cursosdesarrolloweb

Cursosdesarrolloweb es una plataforma educativa con cursos y tutoriales en texto y vídeo.

Términos y condiciones Política de privacidad Formulario de contacto

Copyright 2024 © Todos los derechos reservados.

Contacto