This week, the Laravel team released v11.2, which includes a fluent() support helper, a context() helper, improved handling of a missing database during a migrate operation, and more.
Fluent Helper
Philo Hermans contributed a fluent() helper function when working with multi-dimensional arrays. The Fluent class has been in the Laravel framework for quite a while; however, this PR introduces a helper convenience method to create a fluent object instance:
$data = [
‘user’ => [
‘name’ => ‘Philo’,
‘address’ => [
‘city’ => ‘Amsterdam’,
‘country’ => ‘Netherlands’,
]
],
‘posts’ => [
[
‘title’ => ‘Post 1’,
],
[
‘title’ => ‘Post 2’,
]
]
];
collect($data)->get(‘user’);
fluent($data)->user;
collect($data)->get(‘user’)[‘name’];
fluent($data)->get(‘user.name’);
collect(collect($data)->get(‘posts’))->pluck(‘title’);
fluent($data)->collect(‘posts’)->pluck(‘title’);
json_encode(collect($data)->get(‘user’)[‘address’]);
fluent($data)->scope(‘user.address’)->toJson();
Context Helper
Michael Nabil contributed a convenience context() helper function for managing Context. Depending on the arguments passed, you can either add to context, get the context object, or retrieve it (with an optional custom default):
// Add user information to the context
context([‘user’ => auth()->user()]);
// Retrieve the context object
$context = context();
// Retrieve user information from the context
$user = context(‘user’);
// Optional custom default value if not found.
$some_key = context(‘key_that_does_not_exist’, false);
Default Value for Context Getters
Michael Nabil contributed support for a default value on Context getters:
// Before: Returns null if not found
Context::get(‘is_user’);
Context::getHidden(‘is_user’);
// After: Returns `false` if not found
Context::get(‘is_user’, false); // false
Context::getHidden(‘is_user’, false); // false
Context::get(‘is_user’); // null
Job Chain Test Assertion Methods
Günther Debrauwer contributed assertHasChain() and assertDoesntHaveChain() methods:
public function test_job_chains_foo_bar_job(): void
{
$job = new TestJob();
$job->handle();
$job->assertHasChain([
new FooBarJob();
]);
// $job->assertDoesntHaveChain();
}
Better database creation/wipe handling
Dries Vints contributed better database failure handing (#50836) when running migrate when a database isn’t created yet, as well as updating the migrate:fresh command to streamline the process when a database does not exist #50838:
If the migrate:fresh command is called while there isn’t any database created yet, it’ll fail when it tries to wipe the database. This PR fixes this by first checking if the migrations table exists and if not, immediately go to the migrate command by skipping the db:wipe command. This will invoke the migrate command flow and subsequently will reach the point where the command will ask the user to create the database.
In combination with #50836 this will offer a more seamless experience for people attempting to install Jetstream through the Laravel installer and choosing to not create the database.
The above description is taken from Pull Request #50838.
String Trim Removes Invisible Characters
Dasun Tharanga contributed an update to the framework TrimStrings middleware, where invisible characters are not trimmed during an HTTP request, which can cause issues when submitting forms. See Pull Request #50832 for details.
Release notes
You can see the complete list of new features and updates below and the diff between 11.1.0 and 11.2.0 on GitHub. The following release notes are directly from the changelog:
v11.2.0
[11.x] Fix: update [@param](https://github.com/param) in some doc block by @saMahmoudzadeh in https://github.com/laravel/framework/pull/50827
[11.x] Fix: update @return in some doc blocks by @saMahmoudzadeh in https://github.com/laravel/framework/pull/50826
[11.x] Fix retrieving generated columns on legacy PostgreSQL by @hafezdivandari in https://github.com/laravel/framework/pull/50834
[11.x] Trim invisible characters by @dasundev in https://github.com/laravel/framework/pull/50832
[11.x] Add default value for get and getHidden on Context by @michaelnabil230 in https://github.com/laravel/framework/pull/50824
[11.x] Improves serve Artisan command by @nunomaduro in https://github.com/laravel/framework/pull/50821
[11.x] Rehash user passwords when logging in once by @axlon in https://github.com/laravel/framework/pull/50843
[11.x] Do not wipe database if it does not exists by @driesvints in https://github.com/laravel/framework/pull/50838
[11.x] Better database creation failure handling by @driesvints in https://github.com/laravel/framework/pull/50836
[11.x] Use Default Schema Name on SQL Server by @hafezdivandari in https://github.com/laravel/framework/pull/50855
Correct typing for startedAs and virtualAs database column definitions by @ollieread in https://github.com/laravel/framework/pull/50851
Allow passing query Expression as column in Many-to-Many relationship by @plumthedev in https://github.com/laravel/framework/pull/50849
[11.x] Fix Middleware::trustHosts(subdomains: true) by @axlon in https://github.com/laravel/framework/pull/50877
[11.x] Modify doc blocks for getGateArguments by @saMahmoudzadeh in https://github.com/laravel/framework/pull/50874
[11.x] Add [@throws](https://github.com/throws) to doc block for resolve method by @saMahmoudzadeh in https://github.com/laravel/framework/pull/50873
[11.x] Str trim methods by @patrickomeara in https://github.com/laravel/framework/pull/50822
[11.x] Add fluent helper by @PhiloNL in https://github.com/laravel/framework/pull/50848
[11.x] Add a new helper for context by @michaelnabil230 in https://github.com/laravel/framework/pull/50878
[11.x] assertChain and assertNoChain on job instance by @gdebrauwer in https://github.com/laravel/framework/pull/50858
[11.x] Remove redundant getDefaultNamespace method in some classes (class, interface and trait commands) by @saMahmoudzadeh in https://github.com/laravel/framework/pull/50880
[11.x] Remove redundant implementation of ConnectorInterface in MariaDbConnector by @saMahmoudzadeh in https://github.com/laravel/framework/pull/50881
[11.X] Fix: error when using orderByRaw in query before using cursorPaginate by @ngunyimacharia in https://github.com/laravel/framework/pull/50887
The post Use the New Fluent Helper to Work With Multi-dimensional Arrays in Laravel 11.2 appeared first on Laravel News.
Join the Laravel Newsletter to get all the latest Laravel articles like this directly in your inbox.
Source: Read MoreÂ