Articulos Podcast Cartas del editor
8 Novedades que no conoces de Laravel 8

8 Novedades que no conoces de Laravel 8

18 Nov, 2020 | 0

Si tienes proyectos con Laravel 7 o 6 todavía tienes tiempo de actualizarlos a Laravel 8. Laravel 7 tendrá soporte de correcciones de errores hasta el 10 de septiembre de 2020 y correcciones de seguridad hasta el 3 de marzo de 2021.

Laravel 8 viene con varias características que sin duda mejorarán la velocidad que desarrollamos proyectos, como así también, la calidad de los mismos.

 

1. Laravel Jetstream

Laravel Jetstream te permitirá crear un nuevo proyecto de Laravel con todo lo básico que tiene cualquier proyecto web: inicio de sesión, registración de usuarios, verificación de correo electrónico y hasta autenticación de dos pasos.

También incluye Laravel Sanctum para realizar tus APIs y una nueva excelente característica como es la administración de roles y permisos de forma integrada.

Cabe decir que todas las características son opcionales y Jetstream te dará la opción para instalar las que deseemos. También, tiene un archivo de configuración para habilitar o deshabilitar las características que queramos.

Viene con un dashboard como pagina principal de tu proyecto que podes usar como punto de partida para crear nuevas vistas. También viene con toda la lógica para las fotos de perfil de tus usuarios y te olvidas de desarrollar esta característica que es tan común en todos los proyectos web.

 

2. Carpeta para los Modelos

Esto es algo que parece que Tailor no termina de decidirse. Y por eso hizo una encuesta en Twitter para saber si las personas crean una carpeta Models/ para poner todos sus modelos o no. Y la mayoría voto que así era. Por lo tanto, en Laravel 8 vuelva la carpeta Models/ que se había sacado en versiones anteriores de Laravel.

Se actualizaron todos los comandos de Laravel que crean modelos para que se creen los archivos en app/Models/ por defecto.

 

3. Clases para Factories

Hasta Laravel 7.x las Factories eran un archivo plano de php donde teníamos un objeto $factory inyecto de una forma mágica y, a través de él, desarrollábamos nuestra factory.

Ahora, las fabricas se reescribieron totalmente y se basan en clases en lugar de un simple archivo php. Ahora tendrán el siguiente aspecto.

<?php

namespace Database\Factories;

use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;

class UserFactory extends Factory
{
    /**
     * The name of the factory's corresponding model.
     *
     * @var string
     */
    protected $model = User::class;

    /**
     * Define the model's default state.
     *
     * @return array
     */
    public function definition()
    {
        return [
            'name' => $this->faker->name,
            'email' => $this->faker->unique()->safeEmail,
            'email_verified_at' => now(),
            'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
            'remember_token' => Str::random(10),
        ];
    }
}

Ahora que las factories son clases de PHP vamos a poder agregar métodos a nuestras clases para una mejor organización. Como así también, utilizar clases externas para darle mas «superpodes» a nuestras factories.

También se creo Laravel Legacy Factories para brindar soporte para la generación de fábricas de versiones anteriores de Laravel (<= 7.x) para Laravel 8.x.

 

4. Squashing de migraciones

Es muy común que en nuestros proyectos tengamos muchos archivos de migraciones. Por eso, Laravel 8 integra el comando schema:dump para integrar todas las migraciones en único archivo SQL.

Cuando ejecutes schema:dump, Laravel generará un archivo «schema» en la carpeta database/schema. Ahora, cuando intentes migrar tu base de datos y no se hayan ejecutado otras migraciones, Laravel ejecutará primero el SQL del archivo de schema. Después de ejecutar los comandos del archivo, Laravel ejecutará las migraciones restantes que no estaban en el archivo schema.

 

5. Jobs por lotes

Ahora Laravel nos permitirá ejecutar un lote de jobs y luego realizar alguna acción cuando el lote se haya completado. Por ejemplo:

use App\Jobs\ProcessPodcast;
use App\Podcast;
use Illuminate\Bus\Batch;
use Illuminate\Support\Facades\Batch;
use Throwable;

$batch = Bus::batch([
    new ProcessPodcast(Podcast::find(1)),
    new ProcessPodcast(Podcast::find(2)),
    new ProcessPodcast(Podcast::find(3)),
    new ProcessPodcast(Podcast::find(4)),
    new ProcessPodcast(Podcast::find(5)),
])->then(function (Batch $batch) {
    // All jobs completed successfully...
})->catch(function (Batch $batch, Throwable $e) {
    // First batch job failure detected...
})->finally(function (Batch $batch) {
    // The batch has finished executing...
})->dispatch();

return $batch->id;

 

6. Rate limit mejorado

La limitación de requests de Laravel se ha mejorado con más flexibilidad y potencia, manteniendo la compatibilidad con versiones anteriores.

Ahora tenemos la fachada RateLimiter con el método for()que nos permite distintas características. Por ejemplo, podríamos limitar la cantidad de request por minuto a un endpoint en particular, de la siguiente forma.

use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Support\Facades\RateLimiter;

RateLimiter::for('global', function (Request $request) {
    return Limit::perMinute(1000);
});

Hasta podríamos agregar una condición para limitar las descargas de un archivo, por ejemplo.

RateLimiter::for('download-pay-file', function (Request $request) {
    return $request->user()->vipCustomer()
                ? Limit::none()
                : Limit::perMinute(100);
});

Y también podríamos limitar a un usuario por su IP:

RateLimiter::for('download-pay-file', function (Request $request) {
    return $request->user()->vipCustomer()
                ? Limit::none()
                : Limit::perMinute(100)->by($request->ip());
});

 

7. Modo de mantenimiento mejorado

En versiones anteriores de Laravel, el comando php artisan down permitía habilitar el acceso a la aplicación especificando una «lista blanca» de direcciones IP. Esta característica se ha eliminado en favor de una solución más simple a base de «tokens». Ahora podes usar la opción secret para especificar un token de omisión del modo de mantenimiento:

php artisan down --secret="1630542a-246b-4b66-afa1-dd72a4c43515"

Después de colocar la aplicación en modo de mantenimiento, puede navegar a la URL de la aplicación que coincide con este token y Laravel emitirá una cookie de omisión del modo de mantenimiento a su navegador:

https://example.com/1630542a-246b-4b66-afa1-dd72a4c43515

Al acceder a esta ruta oculta, será redirigido a la ruta / de tu aplicación. Una vez que la cookie haya sido enviada a su navegador, podrá navegar por la aplicación normalmente como si no estuviera en modo de mantenimiento. 

 

7. Time testing helpers

Siempre es todo un tema el testing cuando tenemos horas involucradas. Por eso, Laravel 8 viene con distintas funciones para ayudarnos a manipular la hora actual. A continuación dejo varios ejemplos.

public function testTimeCanBeManipulated()
{
    // Ir al futuro...
    $this->travel(5)->milliseconds();
    $this->travel(5)->seconds();
    $this->travel(5)->minutes();
    $this->travel(5)->hours();
    $this->travel(5)->days();
    $this->travel(5)->weeks();
    $this->travel(5)->years();

    // Ir al pasado...
    $this->travel(-5)->hours();

    // Ir a una hora especifica...
    $this->travelTo(now()->subHours(6));

    // Volver al presente...
    $this->travelBack();
}

 

8. Migración a Laravel 8

La migración a Laravel 8 es bastante simple y, según la documentación de Laravel, lleva al rededor de 15 minutos.

También debes tener en cuenta que Laravel 8 funciona con PHP 7.3 en adelante. Así que es algo ha tener en consideración para los paquetes de terceros que hayas instalado en tu proyecto.


Fuente: Laraveltip.com

Soporte Imagina