Дата випуску: January 20, 2026
Laravel Version: 12.48.0
Коротко
Laravel v12.48.0 додає аліаси для виразів у Query Builder, нові події життєвого циклу пакетів, розширені опції декодування JSON у HTTP-відповідях та подію BatchFinished. Реліз також містить покращення типізації, підтримку ізольованої компіляції view під час паралельного тестування та метод skipWhen для CORS middleware.
Головні новинки:
- Аліаси для raw-виразів у Query Builder
- Нова подія
BatchFinishedдля управління життєвим циклом batch - Підтримка флагів декодування JSON у HTTP Client
skipWhen()для HandleCors middleware- Рядки перекладу тепер можуть містити квадратні й фігурні дужки
- Покращення типізації в HTTP, Queue і Collection
- Ізольована компіляція view на кожному процесі під час паралельних тестів
- Покращення продуктивності через нативну інстанціацію класів
Що нового
Псевдоніми виразів у Query Builder
Laravel 12.48.0 додає зручні методи для задання псевдонімів raw-виразів безпосередньо в query builders, що робить raw SQL читабельнішим і простішим у підтримці.
// Before: select available_a - used_a from "users"
// v12.48.0: select (available_a - used_a) as "remaining_a" from "users"
User::select([
'remaining_a' => new Expression('available_a - used_a'),
]);
Pull Request: #58436
Подія BatchFinished
Додано подію BatchFinished, що спрацьовує, коли batch успішно завершується (усі jobs виконано без помилок). Це доповнює BatchFailed і дає точніший контроль над життєвим циклом пакетів.
use Illuminate\Bus\Events\BatchFinished;
Event::listen(function (BatchFinished $event) {
$batch = $event->batch;
// Perform cleanup or post-processing
Log::info("Batch {$batch->id} completed successfully");
// Trigger follow-up actions
dispatch(new NotifyAdminOfCompletion($batch));
});
Застосування:
- Повідомлення про завершення обробки batch
- Очищення ресурсів після успішного виконання
- Збирання метрик або аналітики
- Запуск додаткових workflow
Pull Request: #58431
Флаги декодування JSON для HTTP Client
Клас Response HTTP Client тепер приймає кастомні флаги декодування JSON, даючи контроль над парсингом JSON-відповідей.
$response = Http::get('https://api.example.com/data');
// Decode with custom flags
$data = $response->json(flags: JSON_BIGINT_AS_STRING);
// Combine multiple flags
$data = $response->json(
flags: JSON_BIGINT_AS_STRING | JSON_THROW_ON_ERROR
);
Корисно коли:
- Потрібно обробляти великі цілі числа за межами PHP int
- API повертає числові рядки
- Потрібна строгість парсингу з обробкою помилок
Pull Request: #58379
Пропуск HandleCors у middleware
HandleCors тепер підтримує умовне пропускання через новий метод skipWhen(), що дозволяє обходити CORS для конкретних маршрутів або умов.
use Illuminate\Http\Middleware\HandleCors;
// In a service provider or middleware configuration
HandleCors::skipWhen(function ($request) {
// Skip CORS for internal API calls
return $request->is('internal-api/*');
});
// Or use a simpler condition
HandleCors::skipWhen(fn ($request) => $request->hasHeader('X-Internal-Request'));
Це зручно для внутрішніх endpoint-ів або health checks, які не повинні підлягати CORS-політиці.
Pull Request: #58361
Рядки перекладу з дужками та фігурними дужками
Рядки перекладу тепер можуть містити квадратні ([]) і фігурні ({}) дужки, що дозволяє без проблем додавати приклади коду чи JSON у переклади.
// translations/en/messages.php
return [
'code_example' => 'Use the format: {user[name]}',
'array_syntax' => 'Access with: $data[index]',
];
Це знімає обмеження на вміст перекладів і полегшує додавання технічних прикладів.
Pull Request: #58367
Ізольована компіляція view під час паралельних тестів
При паралельних запусках тестів скомпільовані Blade view тепер ізольовані для кожного процесу, що усуває гонки та конфлікти кешу між воркерами.
Наслідки:
- Паралельні тести не заважають кешу view один одному
- Компіляція view безпечна для багатьох процесів
- Підтримується ізоляція тестів на рівні view
Зміни працюють автоматично при використанні in-built паралельного тестування Laravel.
Pull Request: #58390
Покращення подій черги
До подій черги додано додаткові властивості для кращого моніторингу та дебагу:
JobPoppingтепер містить ім'я чергиJobReleasedAfterExceptionмістить тривалість backoff
use Illuminate\Queue\Events\JobPopping;
use Illuminate\Queue\Events\JobReleasedAfterException;
Event::listen(function (JobPopping $event) {
Log::debug("Popping job from queue: {$event->queue}");
});
Event::listen(function (JobReleasedAfterException $event) {
Log::info("Job released with backoff: {$event->backoff} seconds");
});
Pull Requests:
Покращення типізації
Laravel 12.48.0 містить низку змін для кращої підтримки IDE та статичного аналізу:
- Уточнені типи в
PendingRequestдля автодоповнення - Виправлено docblock повертаного типу для
Number::abbreviate() - Зазначено кортежний тип повернення для
Number::pairs() - Покращено тип повернення
Collection::merge() - Розширено повертаний тип
PendingRequest::pool(), щоб підтримувати проміси
Це покращує роботу з PHPStan, Psalm та іншими інструментами статичного аналізу.
Pull Requests:
- #58386, #58395, #58437 (PendingRequest types)
- #58408 (Number::abbreviate)
- #58409 (Number::pairs)
- #58405 (Collection merge)
Додаткові покращення
Продуктивність:
- Використання
new $classзамість reflection для швидшої інстанціації (#58391)
Виправлення помилок:
- Виправлена втрата переназначення змінної (#58376)
- Відновлено зворотну сумісність з третьосторонніми guards (#58385, #58389)
- Виправлено TypeError при порожніх параметрах правила валідації (#58380)
- Виправлено
restoreLockдляMemoizedStore(#58423) - Додано відсутні імпорти (#58394, #58401)
Тестування та якість:
- Змінено
PendingBatchFakeдля підтримки фільтрації (#58375) - Вирішено нескінченний цикл при використанні deferred queue (#58373)
- Додано тест типів для
Illuminate\Support\Str(#58365)
Інші зміни:
- Регістр незалежні асерти заголовків у
TestResponse(#58383) Bus::chainтепер відкидає falsy-елементи (#58369)- Видалено індекси з таблиці failed_jobs (#58362)
- Зроблено
PruneCommand::isPrunable()захищеним (#58430) - Реалізовано
Stringableв Enum rule (#58392) - Оновлено залежність tar з 7.4.3 до 7.5.3 (#58404)
Примітки щодо оновлення
Для типової аплікації суттєвих зламів сумісності не очікується. Перед оновленням перегляньте повний changelog.
Якщо ви використовуєте сторонні authentication guards, перевірте потоки автентифікації на сумісність з виправленнями в цьому релізі.