Команда Laravel випустила версію v12.16.0, що містить новий плавний метод валідації Rule::contains(), правило валідації in_array_keys, новий метод Arr::hasAll() та інше:
# Правило валідації in_array_keys
Стив Бауман додав правило валідації 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 забезпечує наявність усіх зазначених ключів в масиві, немає вбудованого способу перевірити, чи має масив хоча б один з вказаних ключів.
# Взаємодія з прихованим контекстом у атрибуті Context
@devajmeireles додав можливість використовувати прихований атрибут контексту, передаючи другий булевий аргумент hidden. Атрибут Context був доданий у Laravel 12.15, що дозволяє впроваджувати значення контексту:
public function __construct(#[Context('user', hidden: true)] User $user)
Дивіться Запит на злиття #55799 для деталей.
# Додано метод contains() для Rule
Стив Бауман додав метод 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]),
],
]);
Документацію з валідації було оновлено з прикладом використання плавної версії правила.
# Метод Arr::hasAll()
@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
# Метод Stringable::toUri()
@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. Примітки до випуску взяті безпосередньо із зміни:
# v12.16.0
- [12.x] Змініть пріоритет у optimize:clear від @amirmohammadnajmi у https://github.com/laravel/framework/pull/55792
- [12.x] Виправте
TestResponse::assertSessionMissing()при наданні масиву ключів від @crynobone у https://github.com/laravel/framework/pull/55800 - [12.x] Дозволені
Contextатрибути для взаємодії з прихованими даними від @devajmeireles у https://github.com/laravel/framework/pull/55799 - Додано підтримку для надсилання сирих (не кодуваних) вкладень у драйвері електронної пошти Resend від @Roywcm у https://github.com/laravel/framework/pull/55803
- [12.x] Додана опція для завжди відкладати для гнучкого кешу від @Zwartpet у https://github.com/laravel/framework/pull/55802
- [12.x] стилізація: Використовуйте присвоєння з нульовим злиттям (??=) для чистішого коду від @mohsenetm у https://github.com/laravel/framework/pull/55823
- [12.x] Запровадження
Arr::hasAllвід @devajmeireles у https://github.com/laravel/framework/pull/55815 - [12.x] Відновлення перевірки повільного завантаження від @decadence у https://github.com/laravel/framework/pull/55817
- [12.x] Невелике оновлення мови від @AhmedAlaa4611 у https://github.com/laravel/framework/pull/55812
- виправити(cache/redis): використання connectionAwareSerialize у RedisStore::putMany() від @superbiche у https://github.com/laravel/framework/pull/55814
- [12.x] Виправте
ResponseFactory, щоб він також приймавnullзворотний виклик від @crynobone у https://github.com/laravel/framework/pull/55833 - [12.x] Додайте змінні шаблону до обсягу від @wietsewarendorff у https://github.com/laravel/framework/pull/55830
- [12.x] Запровадження
toUriу класStringableвід @devajmeireles у https://github.com/laravel/framework/pull/55862 - [12.x] Видалити залишкові @return теги з конструкторів від @AhmedAlaa4611 у https://github.com/laravel/framework/pull/55858
- [12.x] Замінити псевдонім
is_integer()наis_int(), щоб відповідати Laravel Pint від @xurshudyan у https://github.com/laravel/framework/pull/55851 - Виправити типи аргументів для Illuminate/Database/Query/Builder::upsert() від @jellisii у https://github.com/laravel/framework/pull/55849
- [12.x] Додати правило валідації
in_array_keysдля перевірки наявності вказаних ключів масиву від @stevebauman у https://github.com/laravel/framework/pull/55807 - [12.x] Додати
Rule::containsвід @stevebauman у https://github.com/laravel/framework/pull/55809