Команда 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