News

Laravel 11.30 Released

Published
Laravel 11.30 Released image

Release updates

Never miss a Laravel release

Get an email whenever a new Laravel release lands.

This week, the Laravel team released v11.30, which includes defer testing helpers, the ability to define custom unique string IDs for Eloquent models, the use of backed Enums with AuthorizesRequests, and more.

New withDefer() and withoutDefer() Test Helpers

Tim MacDonald contributed a withoutDefer() and withDefer() test helpers. Using withoutDefer() is helpful when you are working with tests use defer, but you want to disable it to assert the outcome of the deferred call:

// ❌ will not work
User::create(/* ... */);
 
$this->assertAgainstSomeDeferredOutcome();
 
// ✅ Will work
$this->withoutDefer();
 
User::create(/* ... */);
 
$this->assertAgainstSomeDeferredOutcome();

See Pull Request #53340 for implementation on details on how these helpers work.

Introduce HasUniqueStringIds Trait

Luke Kuzmish updated the code around HasUuids and HasUlid eloquent traits so that you can use custom unique string IDs as route keys without having to override resolveRouteBindingQuery(). Here's an example of how you could customize the types of unique strings your model uses:

trait HasTwrnsTrait
{
use HasUniqueStringIds;
 
public function newUniqueId()
{
return (string) Twrn::new();
}
 
protected function isValidKey($value): bool
{
return Twrn::isValid($value);
}
}

This update doesn't introduce any breaking changes as the HasUuids and HasUlid model concerns now use the use HasUniqueStringIds trait. See Pull Request #53280 for more details.

Allow authorize() Method to Accept Enums

Johan van Helden updated the AuthorizesRequests trait to accept backed enums directly. Laravel has recently received multiple updates to allow direct use of Enums in various parts of the framework. Here's an example of using an Enum with the authorize() method:

enum DashboardPermission: string
{
case VIEW = 'dashboard.view';
}
 
 
// Before
public function index(): Response
{
$this->authorize(DashboardPermission::VIEW->value);
 
//
}
 
// After
public function index(): Response
{
$this->authorize(DashboardPermission::VIEW);
 
//
}

Release notes

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

v11.30.0

Paul Redmond photo

Staff writer at Laravel News. Full stack web developer and author.

Sponsored

serpapi logo
SerpApi

The Web Search API for Your LLM and AI Applications

Visit SerpApi

The latest

View all →
Laravel MCP 1.0 Is Released image

Laravel MCP 1.0 Is Released

Read article
Laravel Vet: Review Composer Code Before It Installs image

Laravel Vet: Review Composer Code Before It Installs

Read article
What's New in PHP 8.6 image

What's New in PHP 8.6

Read article
Building EasyReply: How We Used Laravel to Unify Customer Support image

Building EasyReply: How We Used Laravel to Unify Customer Support

Read article
PostgreSQL Monitoring and Schema Linting for Laravel with Vacuum image

PostgreSQL Monitoring and Schema Linting for Laravel with Vacuum

Read article
PayZephyr: One Payment API for Stripe, Paystack, and PayPal image

PayZephyr: One Payment API for Stripe, Paystack, and PayPal

Read article