Laravel 13.10.0: новий драйвер storage для кешування та покращення в роботі черг

Перекладено ШІ 0 Laravel News 21 травня, 2026

Laravel v13.10.0 представляє новий драйвер кешування storage та розширені можливості для керування чергами й розкладом. Бажаєте дізнатися, як ці оновлення допоможуть оптимізувати роботу ваших проєктів?

У Laravel v13.10.0 з'явився драйвер кешу storage на базі абстракції файлової системи. Це дозволяє використовувати S3 (або будь-який інший диск) як сховище ключ/значення без встановлення додаткових пакетів. Також оновлення додає опцію --stop-when-empty-for для воркерів черг, подію WorkerIdle, колбеки життєвого циклу для груп розкладу, метод Schema::hasForeignKey() та низку покращень для тестування черг.

  • Новий драйвер кешу storage на базі файлової системи Laravel
  • Опція --stop-when-empty-for для воркерів черг
  • Подія WorkerIdle для виявлення бездіяльних воркерів
  • Колбеки життєвого циклу та виводу в Schedule::group()
  • Хелпер Schema::hasForeignKey()
  • Вивід queue:failed --json у форматі JSON
  • Хелпер для тестів assertPushedOnce()
  • Підтримка Enum для назв черг у QueueFake
  • Передача WorkerOptions у додаткові події воркера

# Що нового

# Драйвер кешу Storage

Новий драйвер storage використовує сервіси файлової системи Laravel для зберігання закешованих значень. Це передусім корисно для використання S3 як сховища ключ/значення — тепер Redis або Memcached не є обов'язковими.

У стандартний конфіг config/cache.php додано запис для storage:

'storage' => [
    'driver' => 'storage',
    'disk' => env('CACHE_STORAGE_DISK'),
    'path' => env('CACHE_STORAGE_PATH', 'framework/cache/data'),
],

Вкажіть будь-який диск (наприклад, s3) у CACHE_STORAGE_DISK, і драйвер буде записувати дані через рівень файлової системи Laravel. Кожне значення зберігається як файл із серіалізованим корисним навантаженням та міткою часу закінчення терміну дії.

PR: #60131 від @taylorotwell

# Автозупинка воркера при бездіяльності

Команда queue:work тепер підтримує опцію --stop-when-empty-for. Вона зупиняє воркер, якщо він не обробив жодного завдання протягом вказаної кількості секунд:

php artisan queue:work --stop-when-empty-for=60

Це зручно для середовищ, що масштабуються, або короткочасних процесів, коли воркери мають завершувати роботу автоматично, якщо черга порожня.

PR: #60176 від @taylorotwell

# Подія бездіяльності воркера

Нова подія WorkerIdle спрацьовує, коли воркер перевіряє чергу і не знаходить завдань. На відміну від JobPopping, яка активується при кожній спробі отримати завдання, WorkerIdle дозволяє точно відстежувати простій для перерозподілу потужностей або логування.

PR: #60134 від @jackbayliss

# Конфігурація воркера в подіях

Об'єкт WorkerOptions (що містить прапорець --name та інші налаштування) тепер передається в події Pausing, Resuming, Interrupted та Looping. Раніше було складно ідентифікувати, який саме екземпляр воркера викликав подію.

PRs: #60135, #60153 від @jackbayliss

# Колбеки життєвого циклу для груп розкладу

Метод Schedule::group() тепер підтримує ті самі колбеки, що й окремі завдання. Це дозволяє налаштувати логіку для всієї групи одразу:

Schedule::group(function (Schedule $schedule) {
    $schedule->command('reports:generate');
    $schedule->command('reports:email');
})->onFailure(function () {
    // спрацьовує при помилці будь-якого завдання в групі
})->onSuccess(function () {
    // спрацьовує при успішному виконанні кожного завдання групи
});

PR: #60133 від @cosmastech

# Доступ до екземпляра Event у колбеках

Колбеки запланованих завдань (onSuccess, onFailure, then) тепер можуть приймати екземпляр Event. Це дає прямий доступ до конфігурації завдання: команди, шляху до логів тощо:

$schedule->command('reports:generate')
    ->onFailure(function (Event $event) {
        Log::error("Заплановане завдання не виконано: {$event->command}");
    });

PR: #60144 від @cosmastech

# Перевірка існування зовнішнього ключа

Новий метод Schema::hasForeignKey() дозволяє перевірити наявність обмеження зовнішнього ключа в таблиці. Це доповнює існуючі хелпери getForeignKeys() та hasIndex():

if (! Schema::hasForeignKey('orders', ['user_id'])) {
    Schema::table('orders', function (Blueprint $table) {
        $table->foreign('user_id')->references('id')->on('users');
    });
}

PR: #60169 від @Tresor-Kasenda

# JSON-вивід для помилок черги

Команда queue:failed отримала прапорець --json. Кожен запис містить id, connection, queue, class та failed_at. Це уніфікує роботу з CLI-інструментами Laravel, такими як route:list або queue:monitor.

PR: #60168 від @Tresor-Kasenda

# Очищення переповнення SQS при очищенні черги

Розширене сховище SQS (додане у 13.9.0) тепер підтримує опцію flush_on_clear. Якщо вона увімкнена, виконання queue:clear також викличе flush() для пов'язаного кешу переповнення. Це важливо для S3-сховищ, щоб не платити за залишкові об'єкти:

'sqs' => [
    // ...
    'extended_store_options' => [
        'enabled' => true,
        'disk' => 's3',
        'flush_on_clear' => true,
    ],
],

PR: #60138 від @Orrison

# Перевірка на поодиноке завдання в черзі

Queue::assertPushedOnce() — це лаконічна альтернатива Queue::assertPushedTimes(JobClass::class, 1):

// Раніше
Queue::assertPushedTimes(ProcessOrderJob::class, 1);
 
// Тепер
Queue::assertPushedOnce(ProcessOrderJob::class);

PR: #60150 від @weshooper

# Enum для назв черг у тестах

QueueFake тепер нормалізує назви черг у форматі Enum так само як і основний драйвер. Використання UnitEnum у push(), size() або pendingJobs() тепер працює коректно.

PR: #60161 від @Tresor-Kasenda

# Request ID у логах Laravel Cloud

Для застосунків у Laravel Cloud ідентифікатор запиту тепер виводиться у логах як окреме поле JSON, а не вкладене в context або extra блоки Monolog.

PR: #60156 від @jradtilbrook

# Різні виправлення та покращення

  • Виправлено валідацію starts_with/ends_with — тепер правила коректно обробляють числові значення, як у Laravel 12 (#60120).
  • Кодування шляхів у підписаних URL — шляхи сховища тепер кодуються перед додаванням у сегменти підписаних маршрутів, що виправляє проблеми з символами ?, & та # (#60137).
  • Екранування аліасів агрегатів — аліаси SQL-функцій тепер екрануються для запобігання конфліктам із зарезервованими словами (#60140).
  • Оптимізація перевірки пауз воркера — процес перевірки став ефективнішим (#60109).
  • Валідація Email на переноси рядків — валідація пошти тепер відхиляє адреси з переносом рядка (#60151).

Джерела:

Популярні

Інше, що варто прочитати

10 Оновлено 21 травня, 2026

Генерація документації в Laravel за допомогою штучного інтелекту

Docudoodle — це потужний пакет для генерації документації в Laravel, який допомагає легко аналізувати вашу кодову базу та створювати документацію за допомогою обраного вами AI. Чи готові ви дізнатися, як цей інструмент може спростити вашу роботу з документуванням коду? Читайте далі!

18 Оновлено 21 травня, 2026

Перетворення даних у типобезпечні DTO за допомогою пакету Data Model

Досліджуйте новий пакет Data Model для PHP, який спрощує процес гідратації об'єктів без зайвих складнощів! Дізнайтеся, як впровадження типобезпечних об'єктів може революціонізувати ваш підхід до розробки, читаючи нашу статтю

17 Оновлено 21 травня, 2026

Налаштування Xdebug з Docker та PHP 8.4 всього за одну хвилину

Встановлення Xdebug може бути складним завданням, але в цій статті ми розкриємо, як швидко та просто налаштувати його за допомогою Docker на прикладі Laravel. Дочитайте до кінця, щоб дізнатися, як за кілька хвилин зробити Xdebug вашим надійним помічником у розробці