Novedades en Laravel 8

El 8 de septiembre de 2020 es la fecha elegida por Taylor Otwell y todo el equipo de Laravel para lanzar la octava versión de este famoso framework de código abierto para PHP.

¿Qué novedades trae Laravel 8? ¿Cuáles son sus principales diferencias con la versión 7? Todo esto lo veremos en este artículo.

Si quieres conocer más sobre Laravel, puedes visitar este artículo donde te cuento todo sobre este framework: ¿Qué es Laravel?

Laravel 6, 7 y 8

Desde la 6ta versión, Laravel cambió su versionado a uno semántico, lo que permitió que los números de raleases avancen más «rápidamente» de lo que veníamos acostumbrados. De esa forma, en lugar de pasar de la versión 6 a la versión 6.1.x, saltamos directamente a la versión 7 y, seis meses después, a la versión 8.

Lo nuevo en Laravel 8

Carpeta Models para nuestros modelos

Uno de las primeras novedades que nos trae la nueva versión del framework favorito de PHP es la presencia de una carpeta en la que se guardarán por defecto nuestros Modelos.

Hasta la anterior versión, si no le indicábamos lo contrario, Laravel dejaba nuestros modelos de datos sueltos dentro de la carpeta app, lo cual, para muchos, daba una apariencia caótica a este directorio. En muchos casos, los desarrolladores terminábamos optando por generar manualmente un directorio Models para tener todo más organizado. Atento a esto, el equipo de Laravel decidió brindarnos este directorio por defecto.

Controladores sin namespace

Otro de los cambios más significativos que vamos a encontrarnos en esta nueva versión (y la que puede ocasionarnos algún dolor de cabeza si no estamos atentos) es la remoción del namespace por defecto de los controllers en el RouteServiceProvider.

Esto significa que si intentamos definir una ruta como lo veníamos haciendo:

Route::get('/', 'MiNuevoController@index');

Obtendremos un error ya que Laravel no podrá encontrar nuestro controlador, sencillamente porque no sabe dónde buscarlo.

¿Cómo vamos a definir nuestras rutas entonces? Pues tenemos dos maneras de hacerlo, la primera y menos elegante es incluir el namespace completo en el nombre del controller:

 Route::get('/', 'App\Http\Controllers\MiNuevoController@index');

La segunda forma y la más recomendada es incluir un array con el controlador y el nombre del método que queremos invocar en la definición de nuestra ruta:

 Route::get('/', [MiNuevoController::class, 'index']); 

Para que esto, deberemos importar nuestro controller al comienzo de nuestro archivo de rutas.

La principal razón para este cambio es la de facilitar el exploración de los archivos de nuestro proyecto en IDE’s como PHPStorm, agilizando así las tareas de debug y refactorización.

Cache de Rutas optimizado

Si llevas un tiempo utilizando Laravel y has desplegado una aplicación en producción, seguramente habrás utilizado el caché de rutas para optimizar el tiempo de respuesta de tu aplicación.

Si no conoces este concepto podemos resumirlo diciendo que Laravel permite cachear tus rutas para que el acceso a las mismas sea más rápido. Esto solo es recomendable cuando haces el deploy, de lo contrario deberás regenerar el cache de rutas cada vez que hagas una modificación en las mismas.

Para generar este cache, solo debes ejecutar

php artisan route:cache

Ahora bien, este comando tenía un problema: no soportaba rutas que utilizaran closures o funciones anónimas.

Es decir, si teníamos algo así:

Route::get('/user', function(Request $request) { 
     return $request->user(); 
});

Sencillamente el comando iba a fallar, haciendo necesario utilizar controladores para todas nuestras rutas.

Por este motivo, una de las mejoras más interesantes en esta nueva versión es la posibilidad de generar el archivo de cache de nuestras rutas sin importar que las mismas tengan closures en su código. A partir de la 8va versión ya no tendremos que elegir entre optimizar nuestras rutas o utilizar funciones anónimas.

¿Cuál de estas mejoras te parece más interesante? Deja tu opinión en la caja de comentarios.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *