News

"In Array Keys" Validation Rule Added in Laravel 12.16

Published
"In Array Keys" Validation Rule Added in Laravel 12.16 image

Release updates

Never miss a Laravel release

Get an email whenever a new Laravel release lands.

The Laravel team released v12.16.0, with a fluent Rule::contains() validation rule, an in_array_keys validation rule, a new Arr::hasAll() method, and more:

in_array_keys Validaiton Rule

Steve Bauman contributed an in_array_keys validation rule that validates whether an array contains at least one of the specified keys:

$validator = Validator::make($request->all(), [
'config' => 'array|in_array_keys:api_key,access_token,oauth_token',
'config.api_key' => 'nullable|string|min:32|max:64',
'config.access_token' => 'nullable|string|min:40',
'config.oauth_token' => 'nullable|string|starts_with:oauth_',
]);

According to the Pull Request, this rule's purpose is to validate that an array has any of a given set of keys, as there is no built-in way to accomplish this without a custom rule:

While the required_array_keys rule exists which ensures all specified keys exist in an array, there is no built-in way to validate that an array has at least one of a given set of keys.

Interact with Hidden Context in the Context Attribute

@devajmeireles contributed the ability to use a hidden context attribute by passing a second hidden boolean argument. The Context attribute was added in Laravel 12.15, which allows you to inject a context value:

public function __construct(#[Context('user', hidden: true)] User $user)

See Pull Request #55799 for details.

Add Rule contains() Fluent Method

Steve Bauman contributed a contains() method to the Rule class, which compliments the string contains version of this rule:

use Illuminate\Validation\Rule;
 
// Before
Validator::make($request->all(), [
'roles' => [
'required',
'array',
'contains:'.implode(',', array_column([Role::Admin, Role::Editor], 'value')),
],
]);
 
 
// After
Validator::make($request->all(), [
'roles' => [
'required',
'array',
Rule::contains([Role::Admin, Role::Editor]),
],
]);

The validation documentation has been updated with an example of using the fluent version of the rule.

Arr hasAll() Method

@devajmeireles contributed a hasAll() method to the Arr support helper:

use Illuminate\Support\Arr;
 
$array = ['name' => 'Taylor', 'language' => 'php'];
 
Arr::hasAll($array, ['name']); // true
Arr::hasAll($array, ['name', 'language']); // true
Arr::hasAll($array, ['name', 'ide']); // false

Stringable toUri() Method

@devajmeireles contributed a toUri() method that can convert a string into a URI instance:

$sentence = 'Go to {https://euhosting.com/support} for support.';
 
$uri = str($sentence)->between('{', '}')->toUri();
 
if (auth()->user()->isVip()) {
$uri = $uri->withQuery(['customer' => auth()->user()->publicId()])
->withQuery(['priority' => 'emergency']);
}
 
return $uri->value();

Release notes

You can see the complete list of new features and updates below and the diff between 12.15.0 and 12.16.0 on GitHub. The following release notes are directly from the changelog:

v12.16.0

Paul Redmond photo

Staff writer at Laravel News. Full stack web developer and author.

Sponsored

laravelcloud logo
Laravel Cloud

Easily create and manage your servers and deploy your Laravel applications in seconds.

Visit Laravel Cloud

The latest

View all →
CPX: The Composer Package Executor for PHP image

CPX: The Composer Package Executor for PHP

Read article
Laravel AI SDK Adds Human-in-the-Loop Tool Approval image

Laravel AI SDK Adds Human-in-the-Loop Tool Approval

Read article
Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals image

Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals

Read article
Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs image

Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs

Read article
Blade Formatting in Laravel Pint image

Blade Formatting in Laravel Pint

Read article
Inertia DevTools Is Now on the Chrome Web Store image

Inertia DevTools Is Now on the Chrome Web Store

Read article