Finalmente llegamos al 8 de Septiembre y tenemos disponible la nueva versión mayor de uno de los mejores frameworks de PHP y en este artÃculo te comentare todas las novedades de Laravel 8.
¿Qué pasa con Laravel 7, 6 y versiones anteriores?
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.
Por otro lado, Laravel 6 es la versión LTS hasta la fecha. Esto quiere decir que se continuará brindando soporte para la corrección de errores hasta el 3 de Septiembre del 2021 y problemas de seguridad hasta el 3 de Septiembre del 2022.
Versiones anteriores a la versión 6 quedaron fuera de soporte oficial. Te recomendarÃa que te des un tiempito para actualizar tus proyectos, aunque sea a Laravel 6, y dejar de acumular deuda técnica.
Nuevas caracterÃsticas de Laravel 8
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.
Nombremos cada una de las nuevas caracterÃsticas y luego entraremos en detalle:
- Laravel Jetstream.
- Carpeta para los Modelos.
- Clases para Factories.
- Squashing de migraciones.
- Jobs por lotes.
- Rate limit mejorado.
- Modo de mantenimiento mejorado.
- Time testing helpers.
- Paginación con Tailwind por defecto.
Laravel Jetstream
Laravel Jetstream nos permite 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. 🚀
Por el lado del frontend, Laravel Jetstream integra Tailwind CSS y la posibilidad de instalar automáticamente Livewire o Inercia en nuestro proyecto.
Cabe decir que todas las caracterÃsticas son opcionales y Jetstream nos 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.
Te dejo la documentación de Laravel Jetstream para que veas con más detalle todas sus features.
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 comando de Laravel que crean modelos para que se creen los archivos en app/Models/
por defecto.
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.
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.
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;
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());
});
Modo de mantenimiento mejorado
En versiones anteriores de Laravel, el comando php artisan down
permitia 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. 😉
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();
}
Paginación con Tailwind
El paginador de Laravel se ha actualizado para utilizar el framework CSS Tailwind de forma predeterminada. Igualmente, no te preocupes porque las vistas con Bootstrap 3 y 4 siguen disponibles.
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.
Te dejo la documentación oficial para actualizar a Laravel 8: https://laravel.com/docs/8.x/upgrade
Esto es todo por el momento, espero que les haya gustado y en Laravel Tip vamos a estar publicando distintos tips para esta nueva versión. Asà que los espero otra vez por acá. Nos vemos en el próximo post. 😉🤙
Excelente gracias por el articulo
Una duda para ver si me puedes orientar, es cierto que Laravel en las nuevas versiones 6,7 y 8 integra novedades que puede que te ayuden a desarrollar más rápido, aunque sinceramente …..por lo que veo tampoco aportan mucha novedad. Todo eso está muy bien, pero respecto a la performance del framework?….he leÃdo artÃculos de comparativas y desde la versión 5.7….realmente el framework tiene un rendimiento menor en tema de peticiones por segundo.
Tienes referencias respecto a este aspecto de algún artÃculo o cuál es tu opinión?.
Un saludo y muchas gracias por la calidad de tus posts.
El tema de la performance cuando hablamos aplicaciones Laravel es una cosa que no merece la pena. La diferencia son microsegundos, es tan irrisorio que a menos que estés haciendo una aplicación con miles de usuarios concurrentes y peticiones complejas, no vas a encontrar amonestaciones en ello.
Hola Rafa, como estas?
Me sumo a lo que dice Jesus. Normalmente, en una aplicación web, los lenguajes o frameworks no son el cuello de botella.
Puede que haya algunos frameworks que consuman más o menos memoria o CPU que otros pero para eso están los balanceadores, que se utilizan en cualquier sistema sea cual sea el lenguaje/framework en los que se allá construido la aplicación.
Excelente articulo, muchas gracias
Muy buen articulo
Excelente, información oportuna, una base de partida para seguir investigando al respecto
Muchas gracias Marco por tu comentario! Saludos.
Hola!!! Como es eso que leà que Laravel 8 viene con sistema de roles incluÃdo ?