У Laravel 12.16 додано правило валідації "In Array Keys"

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 29 травня, 2025
Вийшла нова версія Laravel 12.16.0, яка пропонує захоплюючі нововведення, такі як правило валідації `in_array_keys()` та новий метод `Arr::hasAll()`. Чи готові ви дізнатися, як ці нові функції можуть спростити вашу роботу? Читайте далі, щоб дізнатися більше про нові можливості цієї версії

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