Desarrollo de sitio web

Nosotros Makklays. Ayudamos a realizar la idea.

¿Qué hay de nuevo en Laravel 8?


Makklays - Artículos image

eye 109

Septiembre de 2020 ha llegado, y con él el lanzamiento de Laravel 8 (Laravel 8). Sin cambiar sus tradiciones, cada seis meses (desde Laravel 6) el equipo de Laravel lanza una nueva versión de Laravel con actualizaciones y mejoras. Laravel Non-LTS (versión general), Laravel 8 proporcionará 6 meses de corrección de errores hasta el 8 de marzo de 2021 y 1 año de parches de seguridad hasta el 8 de septiembre de 2021. Así que echemos un vistazo a todas las nuevas mejoras que hay de nuevo en Laravel 8

Novedades de Laravel 8



Laravel 8 tiene varias características nuevas. Función Butch para agrupar trabajos, mejorar funciones anteriores como almacenamiento en caché de rutas, corrección de errores. Además, cambiar el directorio de modelo predeterminado, Schema Dump, Laravel Jetstream, modo de mantenimiento, Límite de velocidad, clases de fábrica de modelos, migraciones de compresión, mejoras de limitación de velocidad, ayudantes de tiempo, componentes de hoja dinámica y muchas más características ... Echemos un vistazo a las novedades y mejoras de Laravel 8. Destacamos las mejoras más interesantes.

Laravel Jetstream



Laravel Jetstream es una mejora de la interfaz de usuario de Laravel. Nuevos formularios de inicio de sesión que incluyen inicio de sesión, registro, verificación de correo electrónico, autenticación de dos factores, administración de sesiones, soporte de API a través de Laravel y administración de equipos.

Carpeta modelos



La subcarpeta ahora se encuentra en app / Models y, en consecuencia, todos los comandos creen que los archivos del modelo se encuentran en el directorio app / Models. Pero si no tiene el directorio aplicación / Modelos, los modelos se buscarán en el directorio de la aplicación (ubicación de versiones anteriores).

Componentes de Dynamic Blade



Laravel 8 presenta componentes de renderizado dinámico . Esto resulta muy útil cuando necesita renderizar dinámicamente la hoja en tiempo de ejecución.



Cierre de envío/cadena ( Dispatch/Chain )



Con el nuevo método de captura, ahora puede proporcionar un cierre para que se ejecute si el cierre en la cola no se puede completar correctamente después de agotar todos los reintentos configurados en su cola:

use Throwable;

dispatch(function () use ($podcast) {
$podcast->publish();
})->catch(function (Throwable $e) {
// This job has failed...
});

Artisan serve



Artisan Serve ahora recarga automáticamente la configuración del entorno cuando detecta cambios en las variables de entorno en su archivo .env local. Anteriormente, este comando tenía que reiniciarse manualmente.

Actualizaciones del espacio de nombres de enrutamiento - Route



En versiones anteriores de Laravel, el objeto RouteServiceProvider contenía una propiedad de espacio de $namespace. El valor de esta propiedad se agregará automáticamente a las definiciones de ruta del controlador y a las llamadas a la acción del método auxiliar. En Laravel 8.x, esta es la propiedad predeterminada. Esto significa que Laravel no prefijará automáticamente el espacio de nombres. Por lo tanto, en las aplicaciones más recientes de Laravel 8.x, las definiciones de ruta del controlador deben definirse utilizando la sintaxis estándar de PHP invocable: URL::action null

use App\Http\Controllers\UserController;

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

Los métodos relacionados con la acción de llamada deben utilizar la misma sintaxis de llamada:

action([UserController::class, 'index']);

return Redirect::action([UserController::class, 'index']);

Si prefiere el prefijo de ruta del controlador de estilo Laravel 7.x, simplemente puede agregar la propiedad $namespace a su aplicación RouteServiceProvider.

Lote de autobuses ( Bus Batching )



La función de procesamiento por lotes de Laravel le permite ejecutar fácilmente un lote de trabajos y luego realizar alguna acción cuando el lote haya terminado.

El nuevo método de fachada Bus batch () se puede utilizar para enviar un lote de trabajos. Por supuesto, la agrupación es principalmente útil junto con las devoluciones de llamada de finalización. Es decir, usando los métodos then, catch y finalmente para determinar si la devolución de llamada por lotes está completa. Cada una de estas devoluciones de llamada obtendrá una instancia cuando se llame: Illuminate\Bus\Batch

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

$batch = Bus::batch([
new ClassFun(Fun::find(1)),
new ClassFun(Fun::find(2)),
new ClassFun(Fun::find(3)),
new ClassFun(Fun::find(4)),
new ClassFun(Fun::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;

Mejorando el estado del servicio



En versiones anteriores de Laravel php artisan down, la función de mantenimiento se podía omitir mediante el uso de una "lista permitida" de direcciones IP que tenían permiso para acceder a la aplicación. Esta característica se ha eliminado en favor de la solución "secreta" más simple.

Mientras está en mantenimiento, puede usar la opción secreta para especificar el token de omisión del estado de mantenimiento:

php artisan down --secret="12345a-321a-3b43-12b1-aab212-1017828"

Después de poner su aplicación en estado de servicio, puede navegar a la URL del sitio que coincide con el token especificado y Laravel 8 le dará a su navegador una cookie de omisión del estado de servicio:

https://ayoursite.com/12345a-321a-3b43-12b1-aab212-1017828

Clases de fábrica de modelos



Desde Laravel 8, las fábricas de modelos de Eloquent se basan en clases con soporte mejorado para las relaciones de fábrica (es decir, el usuario tiene muchos mensajes). Creo que apreciará lo buena que es la nueva sintaxis para crear registros utilizando las nuevas y mejoradas fábricas de modelos:

use App\Models\User;

User::factory()->count(50)->create();

// using a model state "suspended" defined within the factory class
User::factory()->count(5)->suspended()->create();

Migración por compresión



En los casos en que su sitio contenga muchos archivos de migración, puede comprimirlos en un solo archivo SQL. Este archivo se ejecutará primero al iniciar la migración y luego los archivos de migración restantes que no se incluyeron en el archivo comprimido. La compresión de las migraciones existentes puede reducir la cantidad de archivos de migración y también mejorar el rendimiento al ejecutar pruebas en Laravel 8.

taylorotwell (desarrollador Laravel) escribe sobre esto así (traducción):
Este RP agrega soporte para el nuevo comando php artisan schema: dump, que usa mysqldump o pgdump para volcar el estado actual de su esquema en database/schema/{connection}-schema.mysql.

Cuando este archivo existe y php artisan migrate o php artisan migrate: fresh se está ejecutando Y aún no se han realizado migraciones para la base de datos (la tabla de migración está vacía), este archivo de esquema se cargará primero en la base de datos y luego se ejecutarán todas las migraciones pendientes. Esto significa que, de hecho, este archivo de esquema generalmente solo se usará durante el desarrollo local o durante las pruebas de CI. En un entorno de producción, normalmente ya tiene migraciones que se han ejecutado en el pasado, por lo que este archivo de esquema nunca se ejecutará.

Una vez creado el archivo de esquema, se pueden eliminar algunas o todas las migraciones existentes si ya se han ejecutado en su entorno de producción. Ya no son necesarios durante el desarrollo local porque existe el archivo de esquema. Para mayor comodidad, se ha agregado la marca --prune al esquema: volcado para eliminar las migraciones existentes después de volcar el esquema.

Esta nueva característica resuelve dos problemas. En primer lugar, evita que los desarrolladores tengan que tener un directorio de migración enorme lleno de archivos que ya no necesitan. En segundo lugar, cargar un solo archivo de esquema es más rápido que ejecutar cientos de migraciones para cada clase de prueba en sus aplicaciones, por lo que sus pruebas pueden ejecutarse mucho más rápido cuando se usa un esquema.

Eloquent с with()



El desarrollador de esta novedad, ryancco, escribe al respecto así:
Brinda soporte para una sintaxis alternativa y más elegante para relaciones de carga ansiosas restringidas en Laravel 8.

Para evitar realizar cambios importantes, aún admite todas las llamadas de método posibles actualmente:

одиночная строка (->with('foo'))
список строк (->with('foo', 'bar'))
[неассоциативный] массив строк (->with(['foo', 'bar']))
ассоциативный массив строковых ключей и closure значений (->with(['foo' => function () {}]))

Esto introducirá soporte para cierres como segundo argumento, como se muestra a continuación:

// single relationship
$query->with('foo', function ($query) {
$query->where('status', 'active');
});

// multi relationship
$query->with('foo', function ($query) {
$query->where('status', 'active');
})->with('bar', function ($query) {
$query->where(...);
});

Una sintaxis alternativa y actual para esto podría ser usar una matriz asociativa como se muestra a continuación:

// single relationship
$query->with([
'foo' => function ($query) {
$query->where('status', 'active');
},
]);

// multi relationship
$query->with([
'foo' => function ($query) {
$query->where('status', 'active');
},
'bar' => function ($query) {
$query->where(...);
}
]);

Puede ser más fácil de leer, escribir y razonar. Más importante aún, sigue una convención que ya se encuentra en muchos otros métodos en el marco y en la clase Builder, como el método Builder::where, que puede tomar una matriz o un conjunto separado de columnas, operandos y valores.