News

Laravel 9.28 Released

Published
Laravel 9.28 Released image

Release updates

Never miss a Laravel release

Get an email whenever a new Laravel release lands.

The Laravel team released 9.28 with console signal traps, test view data assertions, prevent silently discarding fillable values, and more:

Add view data assertions to TestView

Andrew Brown contributed three TestView assertion methods to assert view data:

$view = $this->view('welcome', [
'name' => 'Taylor',
'email' => 'user@example.com'
]);
 
$view->assertViewHas('name'); // true
$view->assertViewHas('name', 'Tyler'); // false
 
$view->assertViewHasAll(['name', 'email']); // true
$view->assertViewHasAll([
'name' => 'Taylor',
'email' => 'user@example.com',
]); // true
 
$view->assertViewMissing('nonda'); // true
$view->assertViewMissing('name'); // false

Get the intended session URL from the redirector

D. Nagy Gergő contributed a getIntendedUrl() method on the Redirector class to both get and set the intended redirect URL:

$redirect->setIntendedUrl('http://foo.com/bar');
$redirect->getIntendedUrl(); // http://foo.com/bar

Eloquent mode to prevent silently discarding fills for attributes

Ralph J. Smit contributed a model method to prevent discarding fills even if a model is not totally guarded. This is useful if you work on a Laravel codebase that uses fillable fields, but you also don't want to silently discard data passed.

This model is toggleable in a few ways; for example, you could use the environment to only trigger an exception in non-production environments:

Model::preventSilentlyDiscardingAttributes();
 
// Only prevent in non-production environments
Model::preventSilentlyDiscardingAttributes(
! app()->isProduction()
);

Signal traps

Nuno Maduro contributed the introduction of signal traps that allows you to catch process signals and execute code when they occur:

$this->trap(SIGINT, function () {
// End the command's job gracefully ...
// E.g: clean created files, etc ...
 
$this->continue = false;
});
 
// trap multiple signals
$this->trap([SIGTERM, SIGQUIT], function ($signal) {
 
$this->running = false;
 
dump($signal); // SIGTERM or SIGQUIT
});

Support passing Enumerable objects to Stringable methods

Erik Gaal contributed the ability to pass enumerable objects to Stringable helper functions:

// Before
Str::remove($months->toArray(), $someString);
 
// After with an Enumerable object
Str::remove($months, $someString);

Release Notes

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

v9.28.0

Added

  • Added view data assertions to TestView (#43923)
  • Added Illuminate/Routing/Redirector::getIntendedUrl() (#43938)
  • Added Eloquent mode to prevent prevently silently discarding fills for attributes not in $fillable (#43893)
  • Added Illuminate/Testing/PendingCommand::assertOk() (#43968)
  • Make Application macroable (#43966)
  • Introducing Signal Traps (#43933)
  • Allow registering instances of commands (#43986)
  • Support Enumerable in Stringable (#44012)

Fixed

  • Fixed RoueGroup::merge to format merged prefixes correctly. (#44011)
  • Fixes providesTemporaryUrls on AwsS3V3Adapter (#44009)
  • Fix ordering of stylesheets when using @vite (#43962)

Changed

  • Allow invokable rules to specify custom messsages (#43925)
  • Support objects like GMP for custom Model casts (#43959)
  • Default 404 message on denyAsNotFound (#43901)
  • Changed Illuminate/Container/Container::resolvePrimitive() for isVariadic() (#43985)
  • Allow validator messages to use nested arrays (#43981)
  • Ensure freezeUuids always resets UUID creation after exception in callback (#44018)
Paul Redmond photo

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

Sponsored

laravelcloud logo
Laravel Cloud

Easily create and manage your servers and deploy your Laravel applications in seconds.

Visit Laravel Cloud

The latest

View all →
CPX: The Composer Package Executor for PHP image

CPX: The Composer Package Executor for PHP

Read article
Laravel AI SDK Adds Human-in-the-Loop Tool Approval image

Laravel AI SDK Adds Human-in-the-Loop Tool Approval

Read article
Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals image

Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals

Read article
Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs image

Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs

Read article
Blade Formatting in Laravel Pint image

Blade Formatting in Laravel Pint

Read article
Inertia DevTools Is Now on the Chrome Web Store image

Inertia DevTools Is Now on the Chrome Web Store

Read article