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 property
Schema::table('foo', function (Blueprint $table) {
$table->charset = 'utf8mb4';
$table->collation = 'utf8mb4_unicode_ci';
// ...
});
// New methods
Schema::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
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
The post Laravel 10.38 Released appeared first on Laravel News.
Join the Laravel Newsletter to get all the latest Laravel articles like this directly in your inbox.
Read more https://laravel-news.com/laravel-10-38-0