Laravel 9.28 Released
Published on by Paul Redmond
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 environmentsModel::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:
// BeforeStr::remove($months->toArray(), $someString); // After with an Enumerable objectStr::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)