Laravel 12.45.1, 12.45.2 та 12.46.0: нові хелпери для фільтрації значень масивів, Collection::containsManyItems() і підтримка UnitEnum у Gate

0
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 09 січня, 2026
Laravel 12.45.1–12.46.0 додають зручні хелпери для масивів і колекцій, підтримку UnitEnum у Gate::has() та кілька важливих виправлень. Хочете дізнатися, як ці зміни спростять валідацію, авторизацію та обробку даних у вашому проєкті?

Дата релізу: 7 січня 2026
Версії Laravel: 12.45.1, 12.45.2, 12.46.0

Коротко

7 січня 2026 року вийшли три версії фреймворку Laravel із корисними новими хелперами для масивів та колекцій, розширенням Gate для підтримки enum, а також низкою важливих виправлень. У версії 12.46.0 додано методи Arr::onlyValues() і Arr::exceptValues() для фільтрації масивів за значеннями та Collection::containsManyItems() для перевірки кількох елементів. У 12.45.2 Gate::has() почав приймати UnitEnum, а 12.45.1 виправляє критичну проблему з ResourceCollections.

Головні оновлення:

Що нового

Нові методи фільтрації масивів за значеннями

У Laravel 12.46.0 з’явилися два хелпери: Arr::onlyValues() та Arr::exceptValues(). Вони доповнюють Arr::only() і Arr::except(), але фільтрують масиви за значеннями, а не за ключами.

Arr::onlyValues() зберігає лише ті елементи, значення яких збігаються зі вказаними:

use Illuminate\Support\Arr;
 
$roles = ['admin', 'editor', 'viewer', 'guest'];
 
$allowedRoles = Arr::onlyValues($roles, ['admin', 'editor']);
// Result: [0 => 'admin', 1 => 'editor']

Arr::exceptValues() навпаки — видаляє елементи зі значеннями, що збігаються зі списком виключень:

$statuses = ['pending', 'completed', 'failed', 'shipped'];
 
$activeStatuses = Arr::exceptValues($statuses, ['failed', 'completed']);
// Result: [0 => 'pending', 3 => 'shipped']

Обидва методи підтримують строгу порівняльну перевірку через необов’язковий третій параметр, що корисно для масивів зі змішаними типами:

$mixedValues = [1, '1', 2, '2', 3];
 
$integers = Arr::onlyValues($mixedValues, [1, 2, 3], strict: true);
// Result: [0 => 1, 2 => 2, 4 => 3] - only exact type matches

Застосування: фільтрація конфігурацій, видалення певних статусів, санітизація даних за allowlist/denylist та очищення значень форм.

Pull Request: #58317

Collection::containsManyItems()

У 12.46.0 додано метод containsManyItems() для Collection — він перевіряє, чи колекція містить більше одного елемента, доповнюючи containsOneItem().

Приклади використання:

collect([])->containsManyItems();        // false
collect([1])->containsManyItems();       // false
collect([1, 2])->containsManyItems();    // true
collect([1, 2, 3])->containsManyItems(); // true

Метод також приймає необов’язковий callback для перевірки, чи декілька елементів відповідають умові:

$users = collect([
    ['name' => 'John', 'role' => 'admin'],
    ['name' => 'Jane', 'role' => 'editor'],
    ['name' => 'Bob', 'role' => 'admin'],
]);
 
// Check if there are multiple admins
$hasMultipleAdmins = $users->containsManyItems(fn($user) => $user['role'] === 'admin');
// Result: true

Зручно для валідації, коли потрібно переконатися, що вибрано кілька опцій:

$selectedOptions = collect($request->input('options'));
 
if (! $selectedOptions->containsManyItems()) {
    throw ValidationException::withMessages([
        'options' => 'Please select at least two options.'
    ]);
}

Метод ефективний: він рано повертає результат після знаходження більше одного збігу, що добре для великих колекцій.

Pull Request: #58312

Gate: підтримка enum у авторизації

У версії 12.45.2 Gate::has() тепер приймає UnitEnum, а не тільки рядки або BackedEnum. Це дозволяє робити більш типобезпечні перевірки наявності здібностей (abilities).

Раніше перевіряли лише рядки:

if (Gate::has('view-dashboard')) {
    // Ability is defined
}

Тепер можна використовувати PHP enum для типобезпечного перевіряння:

enum Abilities {
    case VIEW_DASHBOARD;
    case EDIT_POST;
    case DELETE_USER;
}
 
Gate::define(Abilities::VIEW_DASHBOARD, fn($user) => $user->isAdmin());
 
if (Gate::has(Abilities::VIEW_DASHBOARD)) {
    // Type-safe ability check - works with UnitEnum!
}

Також працює з BackedEnum:

enum Permission: string {
    case ViewDashboard = 'view-dashboard';
    case EditPost = 'edit-post';
}
 
if (Gate::has(Permission::ViewDashboard)) {
    // Ability existence check with backed enum
}

Зручно для динамічної реєстрації прав та умовного підключення фіч:

foreach (Permission::cases() as $permission) {
    if (! Gate::has($permission)) {
        Gate::define($permission, PermissionPolicy::class);
    }
}

Pull Request: #58310

Інші виправлення та покращення

У випусках 12.45.1, 12.45.2 і 12.46.0 також містяться важливі виправлення та поліпшення:

Версія 12.46.0:

Версія 12.45.2:

Версія 12.45.1:

Примітки щодо оновлення

Релізи зворотно сумісні і не вимагають змін у коді. Оновіть залежність Laravel до останньої версії:

composer update laravel/framework

Джерела

Популярні

Logomark Logotype

Простий пакет RabbitMQ для Laravel

Вам цікаво дізнатися, як спростити інтеграцію RabbitMQ у вашому Laravel-додатку? У нашій статті ми розглянемо пакет Simple RabbitMQ, який дозволяє легко налаштувати багатозʼєднання, публікувати повідомлення та обробляти черги за допомогою простого синтаксису. Читайте далі, щоб дізнатися більше!

Logomark Logotype

Журнал аудиту в Laravel

Хочете забезпечити повну прозорість у своїх Laravel-додатках? Пакет Laravel Audit Log допоможе вам детально відстежувати всі зміни моделей Eloquent та відповідати вимогам регуляторів. Читайте далі, щоб дізнатися, як цей потужний інструмент може підвищити надійність вашого проєкту

Logomark Logotype

4 поширені помилки Vite у Laravel

Використання Vite для створення фронтенд-ресурсів у вашому додатку Laravel може бути захоплюючим, але іноді ви можете стикнутися з певними помилками. У цій статті ми розглянемо чотири поширені помилки, з якими ви можете зіткнутися, а також підкажемо способи їх усунення, щоб ви могли знову зосередитися на розробці вашого додатку