Reescritura: Análisis y Mutación de URI en Laravel 11.35
Esta semana, el equipo de Laravel lanzó la versión 11.35, que incluye análisis y mutación de URI, la capacidad de deshabilitar la truncación de respuestas de excepciones del cliente HTTP, transformar una respuesta HTTP en una instancia Fluent y mucho más.
Análisis y Mutación de URI
Taylor Otwell contribuyó con una clase Uri
para el análisis y la mutación de URI.
$uri = Uri::of('https://laravel.com')
->withQuery(['name' => 'Taylor'])
->withPath('/docs/installation')
->withFragment('hello-world');
$uri->scheme();
$uri->host();
$uri->user();
$uri->password();
$uri->path();
$uri->port();
$uri->query()->all();
$uri->query()->has('name');
$uri->query()->missing('name');
$uri->query()->decode();
// Y más...
return (string) $uri;
También puedes obtener una instancia de URI desde la solicitud actual, rutas nombradas y URLs:
$uri = $request->uri();
$uri = Uri::to('/algo')->withQuery(...);
$uri = Uri::route('ruta-nombrada', ['user' => $user]);
Personalizar o Deshabilitar la Truncación de Mensajes de Excepciones del Cliente HTTP
Steve Bauman contribuyó con la capacidad de personalizar o deshabilitar la truncación de respuestas de excepciones HTTP a través de la configuración de inicio de la aplicación. En el callback withExceptions()
, puedes personalizar la longitud de truncación o deshabilitarla completamente de la siguiente manera:
// bootstrap/app.php
use Illuminate\Http\Client\RequestException;
return Application::configure(basePath: dirname(__DIR__))
// ...
->withExceptions(function (Exceptions $exceptions) {
$exceptions->dontTruncateRequestExceptions();
// O ...
$exceptions->truncateRequestExceptionsAt(260);
})->create();
Transformar los Datos de Respuesta del Cliente HTTP en una Instancia Fluent
Steve Bauman contribuyó con la capacidad de transformar los datos de respuesta del Cliente HTTP en una instancia Fluent:
$fluent = Http::get('https://api.example.com/products/1')->fluent();
$fluent->float('price'); // 420.69
$fluent->collect('colors'); // Collection(['rojo', 'azul'])
$fluent->boolean('on_sale'); // true
$fluent->integer('current_stock'); // 69
Añadir el Trait Conditionable
a la Solicitud
Ahmet Imamoglu añadió el trait Conditionable
a las solicitudes HTTP. Al igual que con el constructor de consultas, ahora puedes usar when()
en una clase de solicitud:
/**
* Preparar los datos para la validación.
*/
protected function prepareForValidation(): void
{
$this->when($this->input('account_id'),
fn (Request $req, int $accountId) => $req->merge(['account_name' => Account::getName($accountId)]),
fn (Request $req) => $req->merge(['account_name' => null])
)->when($this->input('contact_id'),
fn (Request $req, int $contactId) => $req->merge(['contact_name' => Contact::getName($contactId)]),
fn (Request $req) => $req->merge(['contact_name' => null])
);
}
Permitir Ordenar las Rutas por Definición en route:list
Mathieu TUDISCO contribuyó con la capacidad de ordenar los resultados de route:list
por definición:
php artisan route:list --sort=definition
Manejo de Programación: Hacer Ping al Éxito y al Fracaso
Luca Castelnuovo contribuyó con los métodos pingOnSuccessIf()
y pingOnFailureIf()
para el manejo de la programación. Esto permite que el programador haga ping a una URL cuando una tarea falle o tenga éxito:
$pingBackupRun = (bool) config('services.ohdear.tasks.backup:run', false);
$pingBackupRunUrl = config('services.ohdear.tasks.backup:run');
Schedule::command('backup:run')->hourly()
->pingBeforeIf($pingBackupRun, $pingBackupRunUrl . '/starting')
->pingOnSuccessIf($pingBackupRun, $pingBackupRunUrl . '/finished')
->pingOnFailureIf($pingBackupRun, $pingBackupRunUrl . '/failed');
Notas de la versión
Puedes ver la lista completa de nuevas características y actualizaciones a continuación, así como la diferencia entre 11.34.0 y 11.35.0 en GitHub. Las siguientes notas de la versión provienen directamente del changelog: