Команда Laravel випустила версію 13.32.0, яка приносить новий драйвер broadcasting для Mercure, зручні методи для роботи з файловою системою, підтримку enum у чергах та численні виправлення помилок.
Новий драйвер Mercure Broadcasting
Kévin Dunglas додав драйвер broadcasting для Mercure - протоколу реального часу, який працює через SSE (Server-Sent Events) замість WebSockets. Це відкриває нові можливості для розробників, які шукають альтернативу традиційним WebSocket-з'єднанням.
Конфігурація драйвера виглядає так:
// config/broadcasting.php
'mercure' => [
'driver' => 'mercure',
'url' => env('MERCURE_URL'),
'public_url' => env('MERCURE_PUBLIC_URL'),
'secret' => env('MERCURE_JWT_SECRET'),
'encryption_key' => env('MERCURE_ENCRYPTION_KEY'),
],
При роботі з FrankenPHP вбудований хаб не потребує параметрів url або secret. Драйвер підтримує presence-канали та end-to-end зашифровані private-encrypted-* канали. Для клієнтської частини доступний патч для Laravel Echo.
Драйвер також інтегровано у команду встановлення broadcasting, що спрощує початкове налаштування.
Методи copyToDisk() та moveToDisk() для файлової системи
Jack Bayliss додав до FilesystemAdapter методи copyToDisk() та moveToDisk(), які замінюють складний паттерн ручного читання потоку та запису при переміщенні файлів між дисками:
// Копіює на резервний диск, зберігаючи файл на локальному диску
Storage::disk('local')->copyToDisk('backup', 'reports/report.csv');
// Копіює на резервний диск і видаляє файл з локального диску
Storage::disk('local')->moveToDisk('backup', 'reports/report.csv');
// Можна вказати інший шлях призначення
Storage::disk('local')->copyToDisk('s3', 'reports/report.csv', '2026/report.csv');
Наступний pull request додав можливість передавати екземпляр файлової системи замість імені диска, що робить API ще гнучкішим.
Підтримка Enum у методах управління чергами
Jack Bayliss додав підтримку enum для методів Queue::pause(), Queue::resume() та Queue::pauseFor(). Це узгоджує API з підтримкою enum, яка вже доступна в атрибутах Queue/Connection та методах менеджера на кшталт route() і forward():
Queue::pause(Queues::notifications, Connections::Redis);
Queue::resume(Queues::notifications, Connections::Redis);
Queue::pauseFor(Queues::notifications, Connections::Redis, 60);
Основні виправлення та покращення
Версія 13.32.0 включає численні виправлення:
- Виправлено поведінку
containsStrict() при роботі з null-значеннями
- Передача винятків у callback-функції порушень Eloquent
- Виправлення методу
Factory::raw() при кількості записів 0
- Додано відсутню імплементацію
SessionHandlerInterface для PHP 9
- Виправлено
Str::password(), який повертав зайві символи
- Виправлено
Str::camel() для багатобайтових перших символів
- Виправлено
collapseWithKeys() при рядкових ключах
- Виправлено
TypeError у SessionGuard::userFromRecaller()
- Покращено типізацію методів колекцій, що змінюють дані
- Виправлено синхронізацію часу закінчення тегів у Redis-кеші
Додаткові нововведення
- Додано метод
isManagedQueue до CloudManager
- Оптимізовано декодування payload у чергах (тепер виконується один раз)
- Додано
UnitEnum до контракту Authorizable
- Покращено збереження незмінених значень при шифруванні файлів середовища
Повний список змін доступний у changelog, а детальне порівняння версій - у diff між 13.31.0 та 13.32.0 на GitHub.