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.
Context
Attribute
Interact with Hidden Context in the @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.
contains()
Fluent Method
Add Rule Steve Bauman contributed a contains()
method to the Rule
class, which compliments the string contains
version of this rule:
use Illuminate\Validation\Rule; // BeforeValidator::make($request->all(), [ 'roles' => [ 'required', 'array', 'contains:'.implode(',', array_column([Role::Admin, Role::Editor], 'value')), ],]); // AfterValidator::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.
hasAll()
Method
Arr @devajmeireles contributed a hasAll()
method to the Arr
support helper:
use Illuminate\Support\Arr; $array = ['name' => 'Taylor', 'language' => 'php']; Arr::hasAll($array, ['name']); // trueArr::hasAll($array, ['name', 'language']); // trueArr::hasAll($array, ['name', 'ide']); // false
toUri()
Method
Stringable @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
- [12.x] Change priority in optimize:clear by @amirmohammadnajmi in https://github.com/laravel/framework/pull/55792
- [12.x] Fix
TestResponse::assertSessionMissing()
when given an array of keys by @crynobone in https://github.com/laravel/framework/pull/55800 - [12.x] Allowing
Context
Attribute to Interact with Hidden by @devajmeireles in https://github.com/laravel/framework/pull/55799 - Add support for sending raw (non-encoded) attachments in Resend mail driver by @Roywcm in https://github.com/laravel/framework/pull/55803
- [12.x] Added option to always defer for flexible cache by @Zwartpet in https://github.com/laravel/framework/pull/55802
- [12.x] style: Use null coalescing assignment (??=) for cleaner code by @mohsenetm in https://github.com/laravel/framework/pull/55823
- [12.x] Introducing
Arr::hasAll
by @devajmeireles in https://github.com/laravel/framework/pull/55815 - [12.x] Restore lazy loading check by @decadence in https://github.com/laravel/framework/pull/55817
- [12.x] Minor language update by @AhmedAlaa4611 in https://github.com/laravel/framework/pull/55812
- fix(cache/redis): use connectionAwareSerialize in RedisStore::putMany() by @superbiche in https://github.com/laravel/framework/pull/55814
- [12.x] Fix
ResponseFactory
should also acceptnull
callback by @crynobone in https://github.com/laravel/framework/pull/55833 - [12.x] Add template variables to scope by @wietsewarendorff in https://github.com/laravel/framework/pull/55830
- [12.x] Introducing
toUri
to theStringable
Class by @devajmeireles in https://github.com/laravel/framework/pull/55862 - [12.x] Remove remaining @return tags from constructors by @AhmedAlaa4611 in https://github.com/laravel/framework/pull/55858
- [12.x] Replace alias
is_integer()
withis_int()
to comply with Laravel Pint by @xurshudyan in https://github.com/laravel/framework/pull/55851 - Fix argument types for Illuminate/Database/Query/Builder::upsert() by @jellisii in https://github.com/laravel/framework/pull/55849
- [12.x] Add
in_array_keys
validation rule to check for presence of specified array keys by @stevebauman in https://github.com/laravel/framework/pull/55807 - [12.x] Add
Rule::contains
by @stevebauman in https://github.com/laravel/framework/pull/55809