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');
charset
and collation
method to Blueprint
Add @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.
@session
directive
Add Blade 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
whereJsonContains
Add SQLite support for 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
whereJsonContains
andwhereJsonDoesntContain
methods 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
false
values indb:table
command by @PerryvanderMeer in https://github.com/laravel/framework/pull/49379 - [10.x] Fix primary key creation for MySQL with
sql_require_primary_key
enabled by @mtawil in https://github.com/laravel/framework/pull/49374 - [10.x] Add
charset
andcollation
method toBlueprint
by @gcazin in https://github.com/laravel/framework/pull/49396 - Fixes second run of
about
command 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::dot
performance 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
defaultCasters
if not previously set by @inxilpro in https://github.com/laravel/framework/pull/49402 - [10.x] Fixes parameter type in
ManagesFrequencies
by @Lucas-Schmukas in https://github.com/laravel/framework/pull/49399 - [10.x] Add SQLite support for
whereJsonContains
method 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
isEmpty
andisNotEmpty
toComponentAttributeBag
by @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
MailMessage
helpers 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