TGViewer
Заметки разработчика Заметки разработчика @dev_notes_ru · 458 subscribers
Post #1663 284
🚀 Laravel 12.46.0: Разбор ранних январских новинок

Laravel начинает 2026 год не сбавляя темпа! Вышли версии 12.45.1, 12.45.2 и главная звезда — 12.46.0. Это не просто исправления багов, а новые мощные инструменты для работы с массивами, коллекциями и авторизацией.

Давайте разберем нововведения, чтобы вы могли сразу применять их в своих проектах. Все изменения обратно совместимы.

✨ Новые методы фильтрации массивов по значению

Одна из частых задач — отфильтровать массив, оставив или удалив конкретные значения. Раньше приходилось писать циклы или использовать array_filter. Теперь в хелперах Illuminate\Support\Arr есть два новых метода, делающих это в одну строку.

➡️ Arr::onlyValues()
Оставляет в массиве только элементы с указанными значениями.
use Illuminate\Support\Arr;

$roles = ['admin', 'editor', 'viewer', 'guest'];
$allowedRoles = Arr::onlyValues($roles, ['admin', 'editor']);
// Результат: [0 => 'admin', 1 => 'editor']


➡️ Arr::exceptValues()
Делает обратное — удаляет элементы с указанными значениями.
$statuses = ['pending', 'completed', 'failed', 'shipped'];
$activeStatuses = Arr::exceptValues($statuses, ['failed', 'completed']);
// Результат: [0 => 'pending', 3 => 'shipped']


🔥 Важный нюанс: Оба метода поддерживают строгое сравнение типов через третий параметр strict: true. Это спасет от коварных багов.

$mixedValues = [1, '1', 2, '2', 3];
$integers = Arr::onlyValues($mixedValues, [1, 2, 3], strict: true);
// Результат: [0 => 1, 2 => 2, 4 => 3] (строка '1' не попала!)

Идеально для: фильтрации конфигов, очистки статусов, санации данных из форм.

📦 Умная проверка коллекций: containsManyItems()

Работа с коллекциями стала выразительнее. Новый метод containsManyItems() дополняет существующий containsOneItem() и проверяет, содержит ли коллекция более одного элемента.

Простая проверка:
collect([1, 2])->containsManyItems(); // true
collect([1])->containsManyItems(); // false


Мощь в callback-функции: Метод может проверить, удовлетворяют ли условию более одного элемента.
$users = collect([
['name' => 'John', 'role' => 'admin'],
['name' => 'Jane', 'role' => 'editor'],
['name' => 'Bob', 'role' => 'admin'],
]);

$hasMultipleAdmins = $users->containsManyItems(fn($user) => $user['role'] === 'admin');
// Результат: true (админов больше одного)

Сценарий использования: Валидация, где нужно убедиться, что пользователь выбрал хотя бы два варианта. Метод эффективен и прекращает работу, как находит второй подходящий элемент.

🛡 Типобезопасная авторизация с Enum в Gate

Метод has() фасада Gate теперь может принимать любые Enum (UnitEnum), а не только строки или BackedEnum.

Раньше проверка существования правила была только по строке:
if (Gate::has('view-dashboard')) {
// Правило существует
}


Теперь можно использовать чистые Enum для типобезопасности:
enum Abilities {
case VIEW_DASHBOARD;
case EDIT_POST;
}

Gate::define(Abilities::VIEW_DASHBOARD, fn($user) => $user->isAdmin());

if (Gate::has(Abilities::VIEW_DASHBOARD)) { // Работает с UnitEnum!
// Проверка прошла
}


Практическая польза: Это открывает возможности для динамической регистрации прав и элегантной организации кода авторизации.

🛠 Исправления и улучшения под капотом

Каждый минорный релиз несет важные стабилизирующие правки:

- 12.45.1: Исправлена работа ResourceCollection при передаче простого массива вместо коллекции моделей.
-12.45.2: Починены методы Validator::appendRules() и toArray() для AnonymousResourceCollection.
- 12.46.0: Исправлено клонирование подключений к БД с префиксом таблиц и добавлены опции блокировок DDL для MySQL.

💎 Итог: Что это значит

1. Меньше шаблонов: Фильтрация массивов и проверка коллекций теперь в одну строку.
2. Более надежный код: Строгая типизация в хелперах и использование Enum в Gate предотвращают целый класс ошибок.
3. Современный стек: Фреймворк продолжает интегрировать лучшие практики и возможности PHP.

Обновление простое и безопасное: composer update laravel/framework.

Changelog:  v12.46.0,  v12.45.2, v12.45.1.

📱 @dev_notes_ru

#Laravel #Laravel12 #PHP
  • 👍 1
More from @dev_notes_ru
  1. Apr 27, 2026Уникальный индекс при мягком удалении: решаем проблему дубликатов При использовании мягког…
  2. Apr 23, 2026Статические переменные в PHP: использование static внутри функций По данным исследования E…
  3. Apr 21, 2026Валидация массивов в Laravel без N+1: Form Request как построитель контекста Применение пр…
  4. Apr 13, 2026JSON в браузере: import или fetch — руководство по выбору Спойлер: import из JSON — это не…
  5. Apr 6, 2026Проксирование fetch() в серверном JavaScript Стандарт Fetch не специфицирует проксирование…
  6. Apr 2, 2026Taskfile: Когда пора отказаться от Makefile (а когда — нет) Makefile — инструмент с почти…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →