Novedades en Laravel 11

arrow_back Blog

¡Laravel 11 fue liberado el martes 12 de marzo de 2024 junto con Laravel Reverb!

Laravel 11 continúa las mejoras realizadas en Laravel 10.x al introducir una estructura de directorios optimizada, limitación de peticiones (rate limit) por segundo, nueva ruta health check, rotación de claves de encriptación, mejoras en las pruebas de queue, Resend como email transport, añadido el sistema de validación de Laravel a los prompts, nuevos comandos Artisan y más. Además, se ha introducido Laravel Reverb, un servidor WebSocket escalable el cual podemos gestionar nosotros mismos para proporcionar capacidades sólidas en tiempo real para nuestras aplicaciones.

PHP 8.2, versión mínima en Laravel 11

Laravel 11.x requiere una versión mínima de PHP 8.2. Si tienes dudas, no te pierdas todas las novedades en PHP 8.x.

Estructura de directorios optimizada

Laravel 11 introduce una estructura de directorios y archivos optimizada para nuevas aplicaciones Laravel, sin requerir ningún cambio en las aplicaciones existentes. La nueva estructura tiene como objetivo proporcionar una experiencia más ágil y moderna, manteniendo al mismo tiempo muchos de los conceptos con los que los desarrolladores de Laravel ya estamos familiarizados. Aquí tienes un tutorial completo acerca de la nueva estructura de directorios en Laravel 11.

Service Providers

En versiones anteriores de Laravel, por defecto teníamos cinco Service Providers, Laravel 11 incluye un único Service Provider, el AppServiceProvider. La funcionalidad de los Service Providers anteriores se ha incorporado al archivo bootstrap/app.php y ahora es Laravel quien maneja esto automáticamente.

Por ejemplo, el auto discovery de eventos ahora está habilitado de forma predeterminada, lo que elimina en gran medida la necesidad de registrar manualmente los eventos y sus listeners. Sin embargo, si necesitas registrar eventos manualmente, simplemente puedes hacerlo en el archivo AppServiceProvider.

Nuevo Context

Laravel 11 nos ofrece una nueva Fachada Context la cual permiten capturar, recuperar y compartir información a través de solicitudes, jobs y comandos que se ejecutan dentro de nuestra aplicación. Esta información capturada también se incluye en los logs de nuestra aplicación, lo que nos puede dar una visión más profunda del historial de ejecución del código circundante que ocurrió antes de que se escribiera una entrada de registro y nos permite rastrear los flujos de ejecución en todo un sistema distribuido.

Lo primero que podríamos hacer para probar el nuevo Context de Laravel es añadir un par de datos al contexto en el que nos encontremos, que en este caso sería crear un nuevo Podcast.

Puedes ver que añadimos dos entradas al contexto y después llamamos a un job para que procese este Podcast. Gracias a esto, el job Podcast podrá acceder a ese par de entradas de la siguiente forma.

Y como hemos realizado un Log::info, en los logs también podremos ver ese contexto.

Rutas opcionales: API y Broadcast

Los archivos de ruta api.php y channels.php ya no están presentes de forma predeterminada, ya que muchas aplicaciones no los requieren. Sin embargo, se pueden crear usando comandos simples de Artisan:

Middlewares

Anteriormente, las nuevas aplicaciones de Laravel incluían nueve middlewares. Estos middlewares realizan una gran variedad de tareas, como autenticar solicitudes, recortar cadenas de entrada y validación CSRF.

En Laravel 11, estos middlewares se han movido al core del framework, para que no agreguen volumen a la estructura de nuestra aplicación. Además, se han agregado al framework nuevos métodos para personalizar el manejo de los middlewares y se pueden invocar desde el archivo bootstrap/app.php de nuestra aplicación:

Dado que todo Middleware se puede personalizar fácilmente a través del archivo bootstrap/app.php, se ha eliminado el Kernel Http.

Scheduling

Usando una nueva Facade Schedule, las tareas programadas ahora se pueden definir directamente en el archivo routes/console.php, por este motivo, el Kernel de Consola ha sido eliminado:

Manejo de excepciones

Al igual que ocurre con la gestión de rutas y middlewares, el manejo de excepciones ahora se puede personalizar desde el archivo bootstrap/app.php en lugar de hacer uso de una clase de excepciones separada, por este motivo, la clase Exceptions/Handler.php ha sido eliminada:

Nuevo trait Dumpable

El trait Dumpable permite a los desarrolladores de aplicaciones Laravel y a los desarrolladores de paquetes incluir métodos de depuración fácilmente dentro de sus clases.

A continuación, te muestro un ejemplo de código para un caso de uso completo:

Controlador Base

Se ha simplificado el controlador base incluido en las nuevas aplicaciones de Laravel. Ya no extiende de la clase BaseController interna de Laravel y se han eliminado los traits AuthorizesRequestsy ValidatesRequests, ya que pueden incluir en los controladores individuales de nuestras aplicaciones a demanda:

Valores predeterminados

De forma predeterminada, las nuevas aplicaciones de Laravel utilizan SQLite para el almacenamiento de bases de datos, así como para el manejo de las sesiones, la caché y las queues de Laravel. Esto nos permite comenzar a desarrollar nuestras aplicaciones inmediatamente después de crear una nueva aplicación Laravel, sin la necesidad de instalar software adicional ni crear migraciones de bases de datos adicionales.

Además, con el tiempo, los drivers de base de datos de estos servicios de Laravel se han vuelto lo suficientemente sólidos para su uso en producción en muchos contextos de aplicaciones; por lo tanto, brindan una opción sensata y unificada para aplicaciones locales y de producción.

Laravel Reverb

Laravel Reverb ofrece comunicación vía WebSocket en tiempo real increíblemente rápida y escalable directamente a nuestra aplicación Laravel y proporciona una integración perfecta con el conjunto existente de herramientas de transmisión de eventos de Laravel, como Laravel Echo.

Además, Reverb admite el escalado horizontal a través de las capacidades de publicación/suscripción de Redis, lo que permite distribuir nuestro tráfico WebSocket entre múltiples servidores backend de Reverb, todos compatibles con una única aplicación de alta demanda.

Para obtener más información sobre Laravel Reverb, consulta la documentación completa de Reverb.

Limitación de peticiones por segundo

Laravel ahora admite la limitación de peticiones "por segundo" para todos los RateLimiters, incluidos los de solicitudes HTTP y trabajos en cola. Anteriormente, los RateLimiters de Laravel se limitaban a una granularidad "por minuto":

Para obtener más información sobre los RateLimiters en Laravel, consulta su documentación.

Health Check

Las nuevas aplicaciones de Laravel 11 incluyen una ruta health check, que indica a Laravel que defina un punto final de verificación de estado simple que puede ser invocado por servicios de monitoreo del estado de aplicaciones de terceros o sistemas de orquestación como Kubernetes. Por defecto, esta ruta se sirve en /up:

Cuando se realizan solicitudes HTTP a esta ruta, Laravel también lanzará un evento DiagnosingHealth, lo que nos permitirá realizar comprobaciones de estado adicionales que sean relevantes para nuestras aplicaciones.

Rotación de claves de encriptación

Dado que Laravel encripta todas las cookies, incluida la cookie de sesión de nuestra aplicación, esencialmente cada solicitud a una aplicación Laravel depende de la encriptación. Sin embargo, debido a esto, rotar la clave de encriptación de nuestra aplicación cerraría la sesión de todos los usuarios de la aplicación. Además, desencriptar datos que fueron encriptados con la clave de encriptación anterior se vuelve imposible.

Laravel 11 nos permite definir las claves de encriptación anteriores de nuestra aplicación como una lista delimitada por comas a través de la variable de entorno APP_PREVIOUS_KEYS.

Al encriptar valores, Laravel siempre utilizará la clave de encriptación "actual", que se encuentra dentro de la variable de entorno APP_KEY. Al desencriptar valores, Laravel primero probará la clave actual. Si el desencriptado falla con la clave actual, Laravel intentará con todas las claves anteriores hasta que una de las claves pueda desencriptar el valor.

Este enfoque de desencriptación nos permite seguir usando nuestra aplicación ininterrumpidamente incluso si se rota la clave de encriptación.

Para obtener más información sobre el encriptado en Laravel, consulta la documentación de encriptación.

Validación a través de Prompts

Laravel Prompts es un paquete para PHP que se ha incorporado a Laravel para agregar formularios fáciles de usar en nuestras aplicaciones de línea de comandos, con características similares a las de un navegador.

Laravel Prompts admite la validación de entradas mediante closures:

Sin embargo, esto puede resultar engorroso cuando se trata de muchas entradas o escenarios de validación complicados. Por lo tanto, en Laravel 11, podemos utilizar todo el poder del validador de Laravel al validar entradas de datos:

Pruebas de interacción en cola

Anteriormente, intentar probar que un trabajo en cola se liberaba, eliminaba o fallaba manualmente, era engorroso, y requería la definición de colas falsas y stubs personalizados. Sin embargo, en Laravel 11, podemos probar fácilmente estas interacciones en la cola usando el método withFakeQueueInteractions:

Para obtener más información sobre cómo probar trabajos en cola, consulta la documentación de la queue.

Nuevos comandos Artisan

Se han agregado nuevos comandos Artisan para permitir la creación rápida de clases, enums, interfaces y traits:

Mejoras en los casts de los modelos Eloquent

Laravel 11 admite la definición de los casts de nuestros modelos utilizando un método en lugar de una propiedad. Esto permite definiciones de conversión simplificadas y fluidas, especialmente cuando se utilizan casteos con argumentos:

Para obtener más información sobre el casteo de atributos en Eloquent, revisa la documentación de Eloquent.

La función helper once

La función helper once ejecuta el callback de llamada dado y almacena en caché el resultado en la memoria mientras dure la solicitud. Cualquier llamada posterior a la función once con la misma devolución de llamada devolverá el resultado previamente almacenado en caché:

Para obtener más información sobre el helper once, consulta la documentación de los helpers.

Rendimiento mejorado al realizar pruebas con bases de datos en memoria

Laravel 11 ofrece un aumento significativo de velocidad cuando se utiliza la base de datos en memoria SQLite :memory: durante las pruebas. Para lograr esto, Laravel ahora mantiene una referencia al objeto PDO de PHP y lo reutiliza en todas las conexiones, lo que a menudo reduce el tiempo total de ejecución de la prueba a la mitad.

Soporte mejorado para MariaDB

Laravel 11 incluye soporte mejorado para MariaDB. En versiones anteriores de Laravel, podíamos utilizar MariaDB a través del controlador MySQL de Laravel. Sin embargo, Laravel 11 ahora incluye un controlador MariaDB dedicado que proporciona mejores valores predeterminados para este sistema de base de datos.

Para obtener más información sobre los controladores de la base de datos de Laravel, consulta la documentación de la base de datos.


Si quieres seguir aprendiendo más sobre Laravel 11 y dar el salto al código, no te pierdas nuestros primeros cursos con la versión en desarrollo:

Curso de Laravel 11

Aplicación de reservas basadas en franjas horarias con Laravel 11

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