Todos los artículos

Utilice el nuevo Fluent Helper para trabajar con matrices multidimensionales en Laravel 11.2

Julian Beaujardin
Julian Beaujardin Reference: Laravel News April 3rd, 2024

Esta semana, el equipo de Laravel lanzó la versión 11.2, que incluye un asistente de soporte fluent(), un asistente context(), manejo mejorado de una base de datos faltante durante una operación de migración y más

Ayudante fluido

Philo Hermans contribuyó con una función auxiliar fluent() cuando se trabaja con matrices multidimensionales. La clase Fluent ha estado en el marco de Laravel durante bastante tiempo; sin embargo, este PR introduce un método conveniente de ayuda para crear una instancia de objeto fluido:

$data = [
    'user' => [
        'name' => 'Philo',
        'address' => [
            'city' => 'Amsterdam',
            'country' => 'Netherlands',
        ]
    ],
    'posts' => [
        [
            'title' => 'Post 1',
        ],
        [
            'title' => 'Post 2',
        ]
    ]
];

collect($data)->get('user');
fluent($data)->user;

collect($data)->get('user')['name'];
fluent($data)->get('user.name');

collect(collect($data)->get('posts'))->pluck('title');
fluent($data)->collect('posts')->pluck('title');

json_encode(collect($data)->get('user')['address']);
fluent($data)->scope('user.address')->toJson();

Ayudante de contexto

Michael Nabil contribuyó con una conveniente función auxiliar context() para administrar Context. Dependiendo de los argumentos pasados, puede agregarlo al contexto, obtener el objeto de contexto o recuperarlo (con un valor predeterminado personalizado opcional):

// Add user information to the context
context(['user' => auth()->user()]);

// Retrieve the context object
$context = context();

// Retrieve user information from the context
$user = context('user');

// Optional custom default value if not found.
$some_key = context('key_that_does_not_exist', false);

Valor predeterminado para captadores de contexto

Michael Nabil contribuyó con soporte para un valor predeterminado en los captadores de Contexto:

// Before: Returns null if not found
Context::get('is_user');
Context::getHidden('is_user');

// After: Returns `false` if not found
Context::get('is_user', false); // false
Context::getHidden('is_user', false); // false
Context::get('is_user'); // null

Métodos de afirmación de prueba de cadena de trabajo

Günther Debrauwer contribuyó con los métodos assertHasChain() y assertDoesntHaveChain():

public function test_job_chains_foo_bar_job(): void
{
    $job = new TestJob();

    $job->handle();

    $job->assertHasChain([
        new FooBarJob();
    ]);

    // $job->assertDoesntHaveChain();
}

Mejor creación/manejo de borrado de bases de datos

Dries Vints contribuyó a una mejor gestión de fallas de la base de datos (#50836) al ejecutar la migración cuando una base de datos está 'aún no se ha creado, además de actualizar el comando migrar:fresh para agilizar el proceso cuando no existe una base de datos #50838:

Si se llama al comando migrar: fresco mientras aún no se ha creado ninguna base de datos, fallará cuando intente borrar la base de datos. Este PR soluciona este problema verificando primero si la tabla de migraciones existe y, de lo contrario, vaya inmediatamente al comando de migración omitiendo el comando db:wipe. Esto invocará el flujo del comando de migración y posteriormente llegará al punto en el que el comando le pedirá al usuario que cree la base de datos.

En combinación con #50836, esto ofrecerá una experiencia más fluida para las personas que intentan instalar Jetstream a través del instalador de Laravel y eligen no crear la base de datos.

La descripción anterior está tomada de la [Solicitud de extracción n.° 50838] (https://github.com/laravel/framework/pull/50838).

El recorte de cuerdas elimina los caracteres invisibles

Dasun Tharanga contribuyó con una actualización del marco de middleware TrimStrings, donde los caracteres invisibles no se recortan durante una solicitud HTTP, lo que puede causar problemas al enviar formularios. Consulte la Solicitud de extracción n.º 50832 para obtener más detalles.

Notas de la Versión

Puede ver la lista completa de nuevas funciones y actualizaciones a continuación y la diferencia entre 11.1.0 y 11.2.0 en GitHub. Las siguientes notas de la versión provienen directamente del registro de cambios