Команда Laravel випустила версію v12.16.0, що містить новий плавний метод валідації Rule::contains(), правило валідації in_array_keys, новий метод Arr::hasAll() та інше:
Стив Бауман додав правило валідації in_array_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_',
]);
За словами запиту на злиття, метою цього правила є перевірка наявності хоча б одного з зазначених ключів у масиві, оскільки немає вбудованого способу зробити це без кастомного правила:
Хоча правило required_array_keys забезпечує наявність усіх зазначених ключів в масиві, немає вбудованого способу перевірити, чи має масив хоча б один з вказаних ключів.
@devajmeireles додав можливість використовувати прихований атрибут контексту, передаючи другий булевий аргумент hidden. Атрибут Context був доданий у Laravel 12.15, що дозволяє впроваджувати значення контексту:
public function __construct(#[Context('user', hidden: true)] User $user)
Дивіться Запит на злиття #55799 для деталей.
Стив Бауман додав метод contains() до класу Rule, який доповнює версію цього правила для рядків:
use Illuminate\Validation\Rule;
// До
Validator::make($request->all(), [
'roles' => [
'required',
'array',
'contains:'.implode(',', array_column([Role::Admin, Role::Editor], 'value')),
],
]);
// Після
Validator::make($request->all(), [
'roles' => [
'required',
'array',
Rule::contains([Role::Admin, Role::Editor]),
],
]);
Документацію з валідації було оновлено з прикладом використання плавної версії правила.
@devajmeireles додав метод hasAll() до допоміжного класу Arr:
use Illuminate\Support\Arr;
$array = ['name' => 'Тейлор', 'language' => 'php'];
Arr::hasAll($array, ['name']); // true
Arr::hasAll($array, ['name', 'language']); // true
Arr::hasAll($array, ['name', 'ide']); // false
@devajmeireles додав метод toUri(), який може перетворити рядок на екземпляр URI:
$sentence = 'Перейдіть на {https://euhosting.com/support} для підтримки.';
$uri = str($sentence)->between('{', '}')->toUri();
if (auth()->user()->isVip()) {
$uri = $uri->withQuery(['customer' => auth()->user()->publicId()])
->withQuery(['priority' => 'emergency']);
}
return $uri->value();
Повний список нових функцій та оновлень ви можете знайти нижче, а також різницю між версіями 12.15.0 та 12.16.0 на GitHub. Примітки до випуску взяті безпосередньо із зміни:
TestResponse::assertSessionMissing() при наданні масиву ключів від @crynobone у https://github.com/laravel/framework/pull/55800Context атрибути для взаємодії з прихованими даними від @devajmeireles у https://github.com/laravel/framework/pull/55799Arr::hasAll від @devajmeireles у https://github.com/laravel/framework/pull/55815ResponseFactory, щоб він також приймав null зворотний виклик від @crynobone у https://github.com/laravel/framework/pull/55833toUri у клас Stringable від @devajmeireles у https://github.com/laravel/framework/pull/55862is_integer() на is_int(), щоб відповідати Laravel Pint від @xurshudyan у https://github.com/laravel/framework/pull/55851in_array_keys для перевірки наявності вказаних ключів масиву від @stevebauman у https://github.com/laravel/framework/pull/55807Rule::contains від @stevebauman у https://github.com/laravel/framework/pull/55809