Laravel 9.39 Released
The Laravel team released 9.39 this week with Blade template fragments, source output in collection dumps, a new database empty assertion, and more.
Blade template fragments
Bruno Alod contributed Blade template fragments, which render a portion of the view. Fragments are helpful for frontend frameworks that expect HTML over-the-wire, where AJAX responses should only return part of the view.
Given the following Blade template:
<div>
First Name {{ $firstName }}
Last Name: {{ $lastName }}
@fragment('actions')
<div hx-target="this">
@if($enabled)
<button hx-patch="/mark-as-disabled">Mark as Disabled</button>
@else
<button hx-patch="/mark-as-enabled">Mark as Enabled</button>
@endif
</div>
@endfragment
</div>
You can render only the actions fragment as follows:
view('users.profile', $data)->fragment('actions');
Add the source file to Collection dd() calls
Hasyirin Fakhriy added the source file path when using dd() in collections. In recent releases of Laravel, dd() and dump() calls have started including path traces to make it clear which file is dumping output. This update targets collections to benefit from that work as well:
Collection::make([
'version' => App::version(),
])->dd();
/*
array:1 [▼ // routes/web.php:19
"version" => "9.39.0"
]
*/
Assert if the database is empty
Christoph Rumpel contributed an assertDatabaseEmpty() which checks if a specific table has no entries. It is a shortcut to asserting database count of zero:
// Using count
$this->assertDatabaseCount(MyModel::class, 0);
// Using the new assertion in v9.39
$this->assertDatabaseEmpty(MyModel::class);
Release Notes
You can see the complete list of new features and updates below and the diff between 9.38.0 and 9.39.0 on GitHub. The following release notes are directly from the changelog:
Added
- Added template fragments to Blade (#44774)
- Added source file to Collection's dd method output (#44793, d2e0e85)
- Added
Illuminate/Support/Testing/Fakes/PendingBatchFake::dispatchAfterResponse()
(#44815) - Added
Illuminate/Foundation/Testing/Concerns/InteractsWithDatabase::assertDatabaseEmpty()
(#44810)
Fixed
- Fixed
InteractsWithContainer::withoutMix()
(#44822)
Changed
- Update
UpCommand::handle
that must return int (#44807) - Decouple database component from console component (#44798)
- Improve input argument parsing for commands (#44662, #44826)
- Added DatabaseBatchRepository to provides() in BusServiceProvider (#44833)
- Move reusable onNotSuccessfulTest functionality to TestResponse (#44827)
- Add CSP nonce to Vite reactRefresh inline script (#44816)
- Allow route group method to be chained (#44825)
- Remove __sleep() & __wakeup() from SerializesModels trait. (#44847)
- Handle SQLite without ENABLE_DBSTAT_VTAB enabled in
Illuminate/Database/Console/DatabaseInspectionCommand::getSqliteTableSize()
(#44867) - Apply force flag when necessary in
Illuminate/Queue/Listener
(#44862) - De-couple Console component from framework (#44864)
- Update Vite mock to return empty array for preloadedAssets (#44858)