Команда Laravel випустила версію 13.15.0, яка приносить типізовані аксесори для перекладів, покращену роботу з JSON Schema, виділений драйвер черг для Laravel Cloud, а також виправлення критичних вразливостей у валідації та маршрутизації.
Типізовані аксесори для перекладів
Хелпери перекладів раніше повертали широкі типи: __() повертав 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().
Десеріалізація JSON Schema
Компонент JsonSchema отримав метод fromArray(), який перетворює сирий масив JSON Schema назад в об'єкти Type - це зворотна операція до серіалізації. Також додано підтримку об'єднань декількох типів (multi-type union) у конструкторі схем.
Виділений драйвер черг для Laravel Cloud
В релізі з'явився спеціальний драйвер черг для керованих черг Laravel Cloud. Керовані черги тепер завантажуються до сервіс-провайдерів, драйвер викидає виключення ManagedQueueNotFoundException, коли налаштована черга відсутня, та виправлено нормалізацію імен FIFO-черг. Заголовок ідентифікатора запиту перейменовано з X-Request-ID на Cloud-Request-ID і тепер він виводиться в логах.
Enum у методі Queue::route()
Тепер можна передавати enum-кейси в метод Queue::route() як для імені черги, так і для з'єднання при маршрутизації завдань.
Виправлення вразливості date_equals
Правило валідації date_equals використовувало нестроге порівняння. Невалідний рядок дати парсився як null, а null == 0 оцінюється як true, тому невалідна дата могла пройти валідацію проти референсної дати, що парситься у хибне значення (наприклад, 1970-01-01 00:00:00). Виправлення використовує строге порівняння для оператора рівності, зберігаючи нестроге порівняння для легітимних об'єктів DateTime.
Обмеження десеріалізації маршрутів
Десеріалізація маршрутів тепер обмежує класи, які вона приймає, зменшуючи поверхню атаки для ін'єкції об'єктів під час кешування та розв'язання маршрутів.
Виправлення хелпера Number
Виправлено кілька крайніх випадків у хелпері Number: метод Number::fileSize() тепер обробляє від'ємні значення байтів, Number::trim() більше не повертає null для INF та NAN, а Number::pairs() коректно обробляє від'ємні кроки та викидає виключення для нульового кроку, щоб запобігти нескінченним циклам.
Інші виправлення та покращення
- Виправлено нескінченну рекурсію, коли scope моделі визначається з приватним атрибутом, і коли група middleware посилається на саму себе
- Команда
queue:failed тепер показує реальне ім'я класу
- Додано
Prohibitable до команд cache:clear та queue:flush
- Клас
InvokedProcess тепер підтримує макроси
- Забезпечено, щоб незмінені скомпільовані Blade-шаблони не залишалися прострочені
- Додано generics до геттерів
DatabaseTransactionsManager та методу QueueRoutes::all()
Повний список змін доступний у офіційному changelog та релізі v13.15.0.