Дата релізу: 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.
Головні оновлення:
Arr::onlyValues() та Arr::exceptValues() для фільтрації масивів за значеннямиCollection::containsManyItems() — перевірка на наявність кількох елементівUnitEnum у Gate::has() для типобезпечної авторизаціїResourceCollection та додавання правил валідатораУ 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
У 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
У версії 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:
Container::buildSelfBuildingInstance(), щоб уникнути помилок у Psalm (#58314)Версія 12.45.2:
Validator::appendRules() при використанні рядків правил через pipe (#58304)toArray() на AnonymousResourceCollection, щоб коректно повертати масив ресурсів (#58302)Версія 12.45.1:
ResourceCollection з простим масивом замість колекції моделей (#58299)Релізи зворотно сумісні і не вимагають змін у коді. Оновіть залежність Laravel до останньої версії:
composer update laravel/framework
Вам цікаво дізнатися, як спростити інтеграцію RabbitMQ у вашому Laravel-додатку? У нашій статті ми розглянемо пакет Simple RabbitMQ, який дозволяє легко налаштувати багатозʼєднання, публікувати повідомлення та обробляти черги за допомогою простого синтаксису. Читайте далі, щоб дізнатися більше!
Хочете забезпечити повну прозорість у своїх Laravel-додатках? Пакет Laravel Audit Log допоможе вам детально відстежувати всі зміни моделей Eloquent та відповідати вимогам регуляторів. Читайте далі, щоб дізнатися, як цей потужний інструмент може підвищити надійність вашого проєкту
Використання Vite для створення фронтенд-ресурсів у вашому додатку Laravel може бути захоплюючим, але іноді ви можете стикнутися з певними помилками. У цій статті ми розглянемо чотири поширені помилки, з якими ви можете зіткнутися, а також підкажемо способи їх усунення, щоб ви могли знову зосередитися на розробці вашого додатку