El equipo de Laravel ha lanzado las versiones 9.33 y 9.34, introduciendo Laravel Precognition, la sintaxis corta de atributos para componentes de hoja de cierre automático, y más.

Nota: también cubrimos las principales novedades lanzadas en Laravel 9.33, lanzada el pasado viernes entre el típico lanzamiento semanal.

Laravel Precognition (9.33)

Tim MacDonald contribuyó con la introducción de Precognition. Mientras que una explicación completa de fuera del alcance de este artículo, echa un vistazo a Pull Request #44339 para una descripción profunda de lo que ofrece Precognition. En resumen, aquí está el TLDR:

Precognición es una nueva característica del framework que permitirá a los desarrolladores crear nuevas y mejores experiencias para sus usuarios.

Precognition introduce una cabecera de petición/respuesta, un middleware y, en algunos casos, un helper global al que Laravel reacciona de forma única.

Cuando una solicitud de Precognition entra en Laravel, todo hasta el controlador se ejecuta. Esto incluye todo el middleware, la resolución del enlace del modelo de ruta, la validación de la solicitud del formulario, etc.

Deberías leer el Pull Request #44339 para ver ejemplos de cómo podrías utilizar esta nueva y emocionante característica.

Sintaxis corta de atributos para componentes de hoja de cierre automático (9.34)

Perry van der Meer contribuyó con la sintaxis de atributos cortos para los componentes de hoja de cierre automático. Este PR se basa en la sintaxis de atributos cortos lanzada en Laravel 9.32 para los componentes Blade:

<!-- current short syntax -->
<x-profile :$userId></x-profile>
 
<!-- short syntax for self-closing component -->
<x-profile :$userId/>

Renderizar «BackedEnum» de PHP en las vistas de Blade (9.34)

Nuno Maduro contribuyó con el soporte de renderización de Blade para los enums respaldados. Tome el siguiente ejemplo de vista de ruta:

// routes/web.php
Route::get('/', function () {
    return view('dashboard', ['role' => UserRoles:: ADMIN]);
});

Dada la variable $role, ahora se renderizará correctamente en Blade:

Hello, {{ $role }}.
 
<!-- ❌ Before: TypeError: htmlspecialchars(): Argument #1 ($string) must be of type string -->
<!-- ✅ After: Hello, Admin. -->

Add cc() method to MailFake (9.33)

Adrian Nürnberger ha aportado el método cc() que faltaba para las falsificaciones de correo. La implementación es la siguiente:

public function cc($users)
{
    return (new PendingMailFake($this))->cc($users);
}

Ignorar case en Stringable contains() y containsAll() (9.33)

Jae Toole ha contribuido a la compatibilidad con las mayúsculas y minúsculas de los métodos contains() y containsAll() de Stringable:

// returns true
$this->stringable('taylor')
     ->contains(['LOR'], true);
 
// returns true
$this->stringable('taylor otwell')
     ->containsAll(['TAYLOR', 'OTWELL'], true);

Release Notes

You can see the complete list of new features and updates below and the diff between 9.33.0 and 9.34.0 on GitHub. The following release notes are directly from the changelog:

v9.34.0

Added

  • Short attribute syntax for Self Closing Blade Components (#44413)
  • Adds support for PHP’s BackedEnum to be «rendered» on blade views (#44445)

Fixed

  • Fixed Precognition headers for Symfony responses (#44424)
  • Allow to create databases with dots (#44436)
  • Fixes dd source on windows (#44451)

Changed

  • Adds error output to db command when missing host (#44394)
  • Changed Illuminate/Database/Schema/ForeignIdColumnDefinition::constrained() (#44425)
  • Allow maintenance mode events to be listened to in closure based listeners (#44417)
  • Allow factories to recycle multiple models of a given typ (#44328)
  • Improves dd clickable link on multiple editors and docker environments (#44406)

v9.33.0

Added

  • Added Illuminate/Support/Testing/Fakes/MailFake::cc() (#44319)
  • Added Ignore Case of Str::contains and Str::containsAll to Stringable contains and containsAll (#44369)
  • Added missing morphs methods for the ULID support (#44364)
  • Introduce Laravel Precognition (#44339)
  • Added Illuminate/Routing/Route::flushController() (#44386)

Fixed

  • Fixes memory leak on PHPUnit’s Annotations registry (#44324#44336)
  • Fixed Illuminate/Filesystem/FilesystemAdapter::url() with config prefix (#44330)
  • Fixed the «Implicit conversion from float to int loses precision» error in Timebox Class (#44357)

Changed

  • Improves dd source on compiled views (#44347)
  • Only prints source on dd calls from dump.php (#44367)
  • Ensures a Carbon version that supports PHP 8.2 (#44374)