This week, the Laravel team released v10.38 with a fromRoute() testing helper, a Blade @session directive, basic whereJsonContains support for SQLite, and more.
As part of Laravel's weekly releases, the team also rolled out Vite 5 support to all first-party Laravel packages. For example, when you run laravel new to create a new Laravel application or you install Breeze, you will be using Vite 5 out of the box!
Here is a bit more info about the new features introduced in Laravel 10.38 this week:
Add fromRoute() testing helper
@fragkp contributed a fromRoute() testing helper to assert a redirect response in a feature test. This method is syntactic sugar for passing a route to the from() test case method:
// Using the `from()` method$this->from(route('index')) ->get(route('language', ['language' => 'de'])) ->assertRedirectToRoute('index');
You can now pass a string to the fromRoute() method for convenience:
$this->fromRoute('index') // changed ->get(route('language', ['language' => 'de'])) ->assertRedirectToRoute('index');
Add charset and collation method to Blueprint
@gcazin contributed two new methods to the schema Blueprint class for defining charset and collation:
// via propertySchema::table('foo', function (Blueprint $table) { $table->charset = 'utf8mb4'; $table->collation = 'utf8mb4_unicode_ci'; // ...}); // New methodsSchema::table('foo', function (Blueprint $table) { $table->charset('utf8mb4'); $table->collation('utf8mb4_unicode_ci'); // ...});
These are new methods, so the existing property assignment will still work as expected.
Add Blade @session directive
Jared Lewis contributed a @session blade directive for checking if a session value exists. It supports embedded @session usage as well:
{{-- Before --}}@if(session('status'))<div class="alert alert-success" role="alert"> {{ session('status') }}</div>@endif {{-- After --}}@session('status')<div class="alert alert-success" role="alert"> {{ $value }}</div>@endsession
Add SQLite support for whereJsonContains
Daniele Ambrosino contributed support for whereJsonContains using the SQLite database:
SQLite added JSON support by default as of version 3.38.0. Nonetheless, the SQLiteGrammar does not currently support
whereJsonContainsandwhereJsonDoesntContainmethods regardless of the SQLite version.
Here's an example from the pull request description:
$users = DB::table('users') ->whereJsonContains('options->languages', 'en') ->get(); /*select * from "users"where exists (select 1 from json_each("options", '$."languages"') where "json_each"."value" is ?)*/ //$users = DB::table('users') ->whereJsonContains('options->languages', false);// the `where` part would look like: `where "json_each"."value" is false`
Add Conditionable to Pipeline
@shane-zeng contributed adding the Conditionable trait to pipelines, which gives you the ability to write pipelines without weird conditions between them.
Here's how we might have to write a pipeline with conditions before Laravel 10.38:
$pipeline = Pipeline::send($user) ->through([ GenerateProfilePhoto::class, ]); if (! $user->isAdmin) { $pipeline->pipe([ SendWelcomeEmail::class, ActivateSubscription::class, ]);} $user = $pipeline->then(fn (User $user) => $user);
Now, you can use the Conditionable's when and unless methods to chain pipeline logic seamlessly:
$user = Pipeline::send($user) ->through([ GenerateProfilePhoto::class, ]) ->when(! $user->isAdmin, function (Pipeline $pipeline) { $pipeline->pipe([ SendWelcomeEmail::class, ActivateSubscription::class, ]); }) ->then(fn (User $user) => $user);
Improve Arr::dot() performance
@bastien-phi contributed an update that improves Arr::dot() performance; in some cases, it seems like it improves things quite drastically as the number of array items increases. See Pull Request #49386 for further details.
Release notes
You can see the complete list of new features and updates below and the diff between 10.37.0 and 10.38.0 on GitHub. The following release notes are directly from the changelog:
v10.38.0
- [10.x] Add routeRoute method to test request by @fragkp in https://github.com/laravel/framework/pull/49366
- [10.x] Update import & typo by @chu121su12 in https://github.com/laravel/framework/pull/49370
- [10.x] Show default
falsevalues indb:tablecommand by @PerryvanderMeer in https://github.com/laravel/framework/pull/49379 - [10.x] Fix primary key creation for MySQL with
sql_require_primary_keyenabled by @mtawil in https://github.com/laravel/framework/pull/49374 - [10.x] Add
charsetandcollationmethod toBlueprintby @gcazin in https://github.com/laravel/framework/pull/49396 - Fixes second run of
aboutcommand on Octane by @josecl in https://github.com/laravel/framework/pull/49387 - [10.x] Fix bug in ArrayLock getCurrentOwner by @Joostb in https://github.com/laravel/framework/pull/49393
- [10.x] Dynamo Batch Repository - Match Default Horizon Sort by @evan-burrell in https://github.com/laravel/framework/pull/49391
- [10.x] Add Blade
[@session](https://github.com/session)Directive by @jrd-lewis in https://github.com/laravel/framework/pull/49339 - [10.x] Improve
Arr::dotperformance by @bastien-phi in https://github.com/laravel/framework/pull/49386 - [10.x] Fix assertStatus() parameter order by @marcovo in https://github.com/laravel/framework/pull/49404
- [10.x] Only set
defaultCastersif not previously set by @inxilpro in https://github.com/laravel/framework/pull/49402 - [10.x] Fixes parameter type in
ManagesFrequenciesby @Lucas-Schmukas in https://github.com/laravel/framework/pull/49399 - [10.x] Add SQLite support for
whereJsonContainsmethod by @danieleambrosino in https://github.com/laravel/framework/pull/49401 - [10x.] Use native json_validate in Validation by @gtjamesa in https://github.com/laravel/framework/pull/49413
- [10.x] Introducing
isEmptyandisNotEmptytoComponentAttributeBagby @devajmeireles in https://github.com/laravel/framework/pull/49408 - [10.x] Drop the primary key if it exists when adding a new primary key by @KieranFYI in https://github.com/laravel/framework/pull/49392
- [10.x] Improve schema builder
getColumns()method by @hafezdivandari in https://github.com/laravel/framework/pull/49416 - [10.x] Add
MailMessagehelpers for plain text email notifications by @onlime in https://github.com/laravel/framework/pull/49407 - [10.x] Test Improvements by @crynobone in https://github.com/laravel/framework/pull/49426
- [10.x] Add Conditionable to Pipeline by @shane-zeng in https://github.com/laravel/framework/pull/49429
