Laravel 10.10 Released
Published on by Paul Redmond
The latest release of Laravel, version 10.10, brings many exciting new features and enhancements. With each release, Laravel continues to push the boundaries of what's possible in web development. In this version, notable contributions include features such as the Sleep
class, the hashed
model cast, and the ability to mark commands as "isolatable."
This week, @timacdonald87 shipped the "Sleep" class. 😴
— Taylor Otwell 🪐 (@taylorotwell) May 9, 2023
Sleep is a slick API around PHP's native sleep functions. Also (this is the 🔥 part), you can "fake" sleeps and make assertions against how your code slept.
This keeps your test super fast. 🚀https://t.co/mJMrs3IAQx pic.twitter.com/ewgfLSeKIz
Let's check a few new feature highlights in this week's release:
Sleep class that wraps native sleep() and usleep()
Tim MacDonald contributed a Sleep
class that wraps native sleep()
and usleep()
functions. Using this class means code that relies on sleep() doesn't need to sleep, which improves testing speed and still maintains confidence using the provided test helpers:
protected function setUp(): void{ parent::setUp(); Sleep::fake();} // UsageSleep::assertSleptTimes(3);
Here's what the code API looks like:
Sleep::for(3)->minutes();Sleep::for(3)->seconds();Sleep::for(30000)->milliseconds();Sleep::for(30000)->microseconds();
You can also use the above to compose something more complex:
Sleep::for(3)->minutes() ->and(5)->seconds() ->and(9)->milliseconds();
I love to see that Laravel continues to ship amazing features with every release!
Hashed cast
Günther Debrauwer contributed a hashed
cast that can ensure an attribute's value is hashed:
The encrypted cast exists, but a cast that hashes a value does not exist yet. In a lot of applications (even Laravel's default application), the user model has a password. I think it makes sense to have a hashed cast that ensures the password (or some other attribute's value) is always hashed before being saved in the database.
Here's an example of what it looks like:
public $casts = [ 'password' => 'hashed',];
Mark commands as "isolatable"
@bytestream contributed the ability to configure a command to be "isolatable" using the $isolated
property:
// equivalent to manually passing `--isolated`protected $isolated = true; // equivalent to manually passing `--isolated=12`protected $isolatedCommandExitCode = 12;
Release notes
You can see the complete list of new features and updates below and the diff between 10.9.0 and 10.10.0 on GitHub. The following release notes are directly from the changelog:
v10.10.0
Added
- Added
$isolated
andisolatedExitCode
properties toIlluminate/Console/Command
(#46925) - Added ability to restore/set Global Scopes (#46922)
- Added
Illuminate/Collections/Arr::sortRecursiveDesc()
(#46945) - Added
Illuminate/Support/Sleep
(#46904, #46963) - Added
Illuminate/Database/Eloquent/Concerns/HasAttributes::castAttributeAsHashedString()
(#46947) - Added url support for mail config (#46964)
Fixed
- Fixed replace missing_unless (89ac58a)
- Gracefully handle invalid code points in e() (#46914)
- HasCasts returning false instead of true (#46992)
Changed
- Use method on UploadedFile to validate image dimensions (#46912)
- Expose Js::json() helper (#46935)
- Respect parents on middleware priority (#46972)
- Do reconnect when redis throws connection lost error (#46989)
- Throw timeoutException instead of maxAttemptsExceededException when a job times out (#46968)
#laravelnews/writing