Laravel 11.30 Lanzado
Esta semana, el equipo de Laravel lanzó la versión 11.30, que incluye nuevos ayudantes de prueba con defer, la posibilidad de definir IDs de cadena únicos personalizados para modelos de Eloquent, el uso de enums respaldados con AuthorizesRequests, y más.
Nuevos ayudantes de prueba conDefer() y sinDefer()
Tim MacDonald contribuyó con los ayudantes de prueba sinDefer()
y conDefer()
. Usar sinDefer()
es útil cuando estás trabajando con pruebas que usan defer, pero quieres deshabilitarlo para verificar el resultado de la llamada diferida:
/ ❌ No funcionará
User::create(/* ... */);
$this->assertAgainstSomeDeferredOutcome();
// ✅ Funcionará
$this->sinDefer();
User::create(/* ... */);
$this->assertAgainstSomeDeferredOutcome();
Consulta Pull Request #53340 para obtener detalles sobre cómo funcionan estos ayudantes.
Introducción del Trait HasUniqueStringIds
Luke Kuzmish actualizó el código alrededor de los traits de Eloquent HasUuids
y HasUlid
para que puedas usar IDs de cadena únicos personalizados como claves de ruta sin tener que sobrescribir resolveRouteBindingQuery()
. Aquí tienes un ejemplo de cómo podrías personalizar los tipos de cadenas únicas que usa tu modelo:
trait HasTwrnsTrait
{
use HasUniqueStringIds;
public function newUniqueId()
{
return (string) Twrn::new();
}
protected function isValidKey($value): bool
{
return Twrn::isValid($value);
}
}
Esta actualización no introduce cambios incompatibles ya que las preocupaciones de modelo HasUuids
y HasUlid
ahora usan el trait HasUniqueStringIds
. Consulta Pull Request #53280 para más detalles.
Permitir que el método authorize() acepte Enums
Johan van Helden actualizó el trait AuthorizesRequests
para aceptar enums respaldados directamente. Laravel ha recibido recientemente varias actualizaciones para permitir el uso directo de Enums en varias partes del framework. Aquí tienes un ejemplo de uso de un Enum con el método authorize()
:
enum DashboardPermission: string
{
case VIEW = 'dashboard.view';
}
// Antes
public function index(): Response
{
$this->authorize(DashboardPermission::VIEW->value);
//
}
// Después
public function index(): Response
{
$this->authorize(DashboardPermission::VIEW);
//
}
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.29.0 y 11.30.0 en GitHub. Las siguientes notas de la versión son directamente del changelog: