Команда Laravel випустила версію v13.15.0, яка додає типізовані аксесоари для перекладів, десеріалізацію JSON Schema, спеціальний драйвер для Cloud-черг, а також низку виправлень у безпеці валідації та роутингу.
- Типізовані аксесоари
trans()->string()таtrans()->array() - Десеріалізація масивів JSON Schema та підтримка multi-type union
- Спеціальний драйвер черг для Laravel Cloud із керованим обробленням
- Виправлення обходу валідації
date_equalsта посилений захист десеріалізації маршрутів
# Що нового
# Типізовані аксесоари для перекладів
Хелпери перекладів зазвичай повертають змішані типи: __() повертає array|string|null, а trans() — Translator|array|string. Це зручно для Blade-шаблонів, проте створює незручності у коді із суворою типізацією та при статичному аналізі. У цьому релізі до Translator додано два аксесоари, які повертають конкретні типи:
public function label(): string
{
return trans()->string($this->name);
}
public function options(): array
{
return trans()->array($this->options_key);
}
Такий підхід відповідає логіці інших типізованих хелперів, як-от config() та request(). Див. #60443.
# Десеріалізація JSON Schema
Компонент JsonSchema отримав десеріалізатор fromArray(), який перетворює необроблений масив JSON Schema назад в об'єкти Type. Також додано підтримку multi-type union для Schema builder. Див. #60387 та #60455.
# Драйвер для Laravel Cloud Queue
Реалізовано спеціальний драйвер для керованих черг у Laravel Cloud. Тепер такі черги ініціалізуються до завантаження сервіс-провайдерів. Якщо налаштована черга відсутня, викидається виняток ManagedQueueNotFoundException. Також виправлено нормалізацію імен FIFO-черг, а заголовок ID запиту змінено з X-Request-ID на Cloud-Request-ID (тепер він відображається в логах). Див. #60181 та інші пов'язані PR.
# Enums у Queue::route()
Тепер у метод Queue::route() можна передавати випадки Enum як для назви черги, так і для з'єднання під час маршрутизації джобів. Див. #60402.
# Безпека: виправлення обходу date_equals
Правило date_equals використовувало несуворе порівняння. Оскільки некоректна дата при парсингу перетворюється на null, а null == 0 повертає true, валідація могла бути помилково пройдена для дат, що відповідають «falsy» значенням (наприклад, 1970-01-01 00:00:00). Виправлення впроваджує суворе порівняння для оператора рівності. Див. #60393.
# Безпека: обмеження десеріалізації маршрутів
Десеріалізація роутингу тепер обмежує перелік дозволених класів. Це зменшує ризик об'єктної ін'єкції під час кешування та розв'язання маршрутів. Див. #60391.
# Оновлення хелпера Number
Виправлено кілька граничних випадків: Number::fileSize() тепер коректно обробляє від'ємні значення байтів, Number::trim() більше не повертає null для INF та NAN, а Number::pairs() адекватно працює з від'ємним кроком (step) та видає помилку при нульовому кроці, щоб уникнути нескінченних циклів. Див. #60147 та інші.
# Інші виправлення та покращення
- Усунуто нескінченну рекурсію в scope моделей із приватними атрибутами та у middleware-групах, що посилаються самі на себе (#59958, #60002)
- Команда
queue:failedтепер відображає реальні назви класів (#60279) - Додано трейт
Prohibitableдля командcache:clearтаqueue:flush(#60430) - Клас
InvokedProcessтепер підтримує макроси (#60392) - Додано generic-типи до геттерів
DatabaseTransactionsManagerтаQueueRoutes::all()(#60420)
Корисні посилання: