Las Novedades más destacadas que trae Laravel 9 – Parte 1

6 minuto(s)

Laravel 9 fue lanzado el día 08 de Febrero de 2022 y es una versión que trae muchas novedades importantes, como un nuevo diseño de routes:list, soporte para PHP 8, controlador para grupos de rutas, Laravel Breeze API y Next.js, Nueva Query Builder Interface, Flysystem 3.x, mejoras en Eloquent Accessors / Mutator, Vistas opcionales con Bootstrap 5, etc. Todas estas novedades y otras más te las compartiré a continuación, asi que vamos con este Post.

Partes

Antes de continuar, te invito a leer los siguientes artículos:

Asimismo te invito a escuchar el Podcast: “Como Hacer De La Programación Un Estilo De Vida”:  

Spotify: Sound Cloud: Apple Podcasts

Bien ahora continuemos con el Post: Las Novedades más destacadas que trae Laravel 9 – Parte 1.

Es importante mencionar que para correr Laravel 9, es necesario que tu servidor cuente con PHP 8. Para conocer mejor las novedades de Laravel 9, voy a colocar el nombre de la novedad, una descripción y una imagen o contenido de referencia, para tener una mejor idea acerca de la novedad.

Symfony Mailer

En versiones anteriores de Laravel, este usaba la librería Swift Mailer para enviar correos electrónicos, sin embargo esta librería ya no recibe mantenimiento por sus colaboradores, por ende el equipo de Laravel ha decidido usar Symfony Mailer en su lugar.

Puedes mirar la guía de actualización en este enlace y verificar si tu proyecto es compatible con Symfony Mailer.

Flysystem 3.x

En Laravel 9 se ha actualizado la dependencia de Flysystem upstream a Flysystem 3.x, este impulsa todas las interacciones del sistema de archivos que ofrece la Facade Storage.

Puedes leer más sobre la actualización a Flysystem 3.x en este enlace.

Eloquent Accessors/Mutators Mejorados

Laravel 9 trae una nueva forma de definir los accesores y mutadores de Eloquent. En versiones anteriores de Laravel, la única manera de definir accesores y mutadores era definiendo métodos prefijados en su modelo de la siguiente manera:


Y en Laravel 9 se puede definir un accesor y un mutador utilizando un método único sin prefijo indicando un tipo de retorno de Illuminate\Database\Eloquent\Casts\Attribute:


Este nuevo enfoque para definir accesores almacenará en caché los valores de objeto que devuelve el atributo, al igual que las clases de convención personalizadas:

Enum Eloquent Attribute Casting

Ahora Eloquent te permite convertir sus valores de atributos en enumeraciones respaldadas de PHP. Para lograr esto, puedes especificar el atributo y la enumeración que deseas convertir en las propiedades del array $casts en tu modelo:


Después que hayas definido la conversión en tu modelo, el atributo especificado se convertirá automáticamente hacia y desde una enumeración cuando interactúe con el atributo:

Enlaces de Route Bindings con Enumeraciones

En la versión de PHP 8.1 se introdujo soporte para Enums y Laravel 9 presenta la capacidad de escribir sugerencias de Enum en la definición de una ruta y Laravel solo invocará la ruta si ese segmento de ruta es un valor de Enum válido en el URI. De lo contrario, se devolverá automáticamente una respuesta HTTP 404. Por ejemplo, dado el siguiente Enum:


Puedes definir una ruta que solo se invoque si el segmento {category} de la ruta es fruits o people. De lo contrario, se devolverá una respuesta HTTP 404:

Scoping Forzado de Enlace de Ruta

En versiones ateriores de Laravel, era posible que desees incluir el segundo modelo de Eloquent en una definición de ruta de modo que debe ser un elemento secundario del modelo Eloquent anterior. Por ejemplo, considera la siguiente definición de ruta que recupera una publicación de blog por su slug para un usuario específico:


Si se usa un enlace implícito con clave personalizada como parámetro de ruta anidada, Laravel automáticamente analizará la consulta para recuperar el modelo anidado por su padre usando convenciones para adivinar el nombre de la relación en el padre. Sin embargo, este comportamiento solo fue admitido anteriormente por Laravel cuando se usaba una clave personalizada para en enlace de la ruta secundaria.

Ahora el Laravel 9, puedes indicarle a Laravel que alcance los enlaces secundarios, incluso cuando no se proporciona una clave personalizada. Para hacer esto, puedes invocar el método scopeBindings() al definir tu ruta:


O bien, puedes instruir a un grupo completo de definiciones de ruta para usar enlaces de ámbito:

Grupos de Ruta en Controlador

En Laravel 9 puedes usa el método controller() para definir el controlador común para todas las rutas dentro del grupo. Luego, al definir las rutas, solo necesitas proporcionar el método de controlador que invocan esas rutas:

Índices de Texto Completo / Claúsulas Where

Si usas la base de datos MySQL o PostgreSQL, el método fullText() ahora se puede agregar a las definiciones de columna para generar índices de texto completo:


Asimismo, los métodos whereFullText() y orWhereFullText() se puede usar para agregar cláusulas “where” de texto completo a una consulta de columnas que tienen índices de texto completo. Laravel 9 trasnformará estos métodos en el SQL apropiado para el sistema de base de datos subyacente. Por ejemplo, MATCH AGAINST generará una claúsula para aplicaciones que utilicen MySQL:

Motor de Base de Datos Laravel Scout

Si tu proyecto trabaja con bases de datos de tamaño pequeño a mediano o tiene un carga de trabajo ligera, ahora puedes usar el motor de base de datos de Scout en lugar de un servicio de búsqueda dedicado como Algolia o MeiliSearch.

El motor de la base de datos utilizará cláusulas “where like” e índices de texto completo al filtrar los resultados de tu base de datos existente para determinar los resultados de búsqueda aplicable a tu consulta.

Representación en Línea de Blade Templates

En ocasiones, es posible que necesites transformar una cadena de plantilla Blade sin formato en HTML válido. Puedes hacer esto utilizando el método render() proporcionado por la facade Blade. El método render() acepta la cadena de plantilla Blade y un array opcional de datos para proporcionar a la plantilla:


Igualmente, el método renderComponent() se puede usar para representar un componente de clase dado al pasar la instancia del componente al método:

Atajo (Shortcut) de Slot Name

En versiones anteriores de Laravel, los nombres de las ranuras se proporcionaban mediante un atributo name en la etiqueta x-slot:


Ahora en Laravel 9, puedes especificar el nombre de la ranura (slot) usando la sintaxis conveniente y más corta:


Bueno, hasta aqui llegamos con esta primera lista de novedades más destacadas que trae Laravel 9.

Ten Paciencia, lo que quiero es que conozcas bien estas novedades y no llenarte el capitulo de mucho contenido porque te puedes marear y no tendrás un óptimo aprendizaje. 

Nota (s)

  • En la siguiente parte y última, veremos la última lista de novedades de Laravel 9.
  • No olvides que debemos usar la Tecnología para hacer cosas Buenas por el Mundo. 

Síguenos en nuestras Redes Sociales para que no te pierdas nuestros próximos contenidos.