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 →
A simple form builder that stays out of your way image

A simple form builder that stays out of your way

Read article
Laravel AI: Trace Agent Runs With Lifecycle Events image

Laravel AI: Trace Agent Runs With Lifecycle Events

Read article
Laravel AI: Get Raw HTTP Responses and Rate Limits image

Laravel AI: Get Raw HTTP Responses and Rate Limits

Read article
Agent Run Observability in Laravel AI SDK 0.11 image

Agent Run Observability in Laravel AI SDK 0.11

Read article
Debounced Queued Event Listeners in Laravel image

Debounced Queued Event Listeners in Laravel

Read article
Statamic Mailables Viewer Previews Laravel Emails in the Control Panel image

Statamic Mailables Viewer Previews Laravel Emails in the Control Panel

Read article