En este artículo vamos a ver algunas de las nuevas características y mejoras que han sido incluidas en esta nueva versión del framework para que puedas aprovecharlas en tus aplicaciones.

Laravel 6 es LTS

La versión previa LTS de este framework fue Laravel 5.5. LTS significa Long Term Support es decir que tendrá soporte a largo plazo, pues recibe correcciones de errores por 2 años (hasta 3 de septiembre de 2021) y un año más de correcciones de seguridad (hasta 3 de septiembre de 2022).

Versionado semántico (SemVer)

A partir de Laravel 6, cambia la nomenclatura para nombrar las versiones del framework de ello hablamos con detalle en el artículo Laravel 6 será LTS. Lo importante a resaltar es que el ciclo liberaciones de nuevas versiones se mantiene, es decir, cada seis meses una versión mayor y semanalmente liberaciones de versiones menores.

Compatibilidad con Laravel Vapor

Laravel Vapor es una plataforma autoescalable de despliegue sin servidor (serverless) en AWS Lambda para aplicaciones de Laravel. La cual facilitaría en gran medida el manejo de base de datos, cache, colas de trabajo (queue), envío de correos electrónicos y más en una sola infraestructura simplificando el proceso de despliegue de las aplicaciones.

Laravel Vapor fue lanzado en Laracon US 2019 por Taylor Otwell.

Mejoras en las excepciones con Ignition

Laravel 6 trae incluido por defecto, Ignition un paquete de código abierto (open source) para mostrar la página de errores y excepciones de la aplicación de una manera muy elegante y detallada. Fue creado por Freek Van der Herten y Marcel Pociot. Posee interesantes características como proveer soluciones a errores comunes en Laravel,  al mostrar con mayor precisión el número de la línea donde se encuentran los errores en archivos Blade, la posibilidad de abrir el archivo que contiene el error desde la página del error, sugerencias sobre cómo arreglar los errores, entre otras funcionalidades.

Mejoras en las respuestas cuando no pasa una política de acceso

En versiones anteriores de Laravel cuando una política negaba el acceso a un usuario no había una forma sencilla de indicarle cuál era la razón. Ahora en Laravel 6 es mucho más fácil con el nuevo método Gate::inspect que permite obtener el mensaje personalizado que le podemos dar al usuario en caso de que se le niegue el acceso.

Por ejemplo, suponiendo que se tiene la siguiente política:

public function view(User $user, Post $post)
{
    return $this->deny('No tienes los permisos necesarios para ver el post');
}

Se puede interactuar con el método Gate::inspect para mostrar dicho mensaje con el método message de esta manera:

$response = Gate::inspect('view', $post);

if ($response->allowed()) {
    // usuario puede ver el post
}

if ($response->denied()) {
    echo $response->message();
}

Job Middleware

En Laravel 6 los job middleware permitirán separar la lógica adicional de la ejecución de tus colas de trabajo, reduciendo el código incluido en las clases Jobs.

Por ejemplo, teniendo un middleware como:

class SomeMiddleware
{
    public function handle($command, $next)
    {
        // Do something...

        return $next($command);
    }
}

Para agregarse a un job se necesitaría agregar con el método middleware en la clase del job de esta manera:

public function middleware()
{
     return [new SomeMiddleware];
}

Alternativamente, puedes agregar el middleware cuando se despacha el job:

SomeJob::dispatch()->through([new SomeMiddleware]);

Colecciones diferidas (LazyCollection)

Adicional a la poderosa herramienta como son las colecciones en Laravel, a partir de esta versión se agregó las colecciones diferidas implementadas por Joseph Silber, las cuales se aprovechan de los generadores de PHP que permiten iterar sobre un gran conjunto de datos sin que sea necesario cargar el conjunto completo en memoria y de esta manera mantener el uso de memoria bajo.

Además, las LazyCollection toman las ventajas que proporcionan los métodos de las colecciones de Laravel como permitirte encadenar métodos para mapear, filtrar, transformar o reducir un conjunto de valores pero sin exceder el límite de memoria cuando se procesa una gran cantidad de datos.

Mejoras en las subconsultas de Eloquent

En Laravel 6 han sido introducidas por Jonathan Reinink un conjunto de mejoras a las subconsultas de Eloquent. Con el método addSelect con el cual se puede añadir una subconsulta de registros directamente en la consulta principal. Por ejemplo:

class User extends Model
{
    public function lastLogin()
    {
        return $this->belongsTo(Login::class);
    }

    public function scopeWithLastLogin($query)
    {
        $query->addSelect('last_login_id', Login::select('id')
            ->whereColumn('user_id', 'users.id')
            ->latest()
            ->limit(1)
        )->with('lastLogin');
    }
}

$users = User::withLastLogin()->get();
$user->lastLogin->created_at;

Laravel UI

De Laravel se ha extraído todas las vistas y demás elementos relacionados a frontend que venía por defecto en el framework para el registro y autenticación de usuarios de la aplicación así como la configuración de VueJS a un nuevo paquete Composer llamado laravel/ui.

De esta manera se hace más agnóstico y permitiendo el desarrollo de la parte de frontend en un paquete separado del framework. Esto quiere decir que ya Bootstrap ni Vue.js no estarán disponibles por defecto en el framework. De igual forma el comando php artisan make:auth fue extraído al paquete nuevo.

Para usar la configuración de Bootstrap y Vue.js presente en las versiones anteriores debes instalar el paquete laravel/ui de la siguiente manera:

composer require laravel/ui

Para generar el frontend de la aplicación ejecuta el comando:

php artisan ui vue --auth

En el caso que solo necesites las vistas con Bootstrap para el registro y autenticacion de usuarios ejecuta:

php artisan ui:auth --views

Como siempre en Styde estamos trabajando para mantenerte informado y actualizado con las novedades que podrás usar en tus proyectos usando Laravel 6.

Ya puedes instalar un nuevo proyecto para probar todo lo nuevo que trae ejecutando:

composer create-project --prefer-dist laravel/laravel proyecto-laravel6

O si tienes el instalador de Laravel puedes ejecutar:

laravel new proyecto-laravel6

Te invitamos a estar atento a nuestro blog y a nuestras redes sociales como siempre estaremos dedicando nuevo contenido para hablar de esta versión.

Suscríbete a nuestro boletín

Te enviaremos publicaciones con consejos útiles y múltiples recursos para que sigas aprendiendo.

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