Laravel v13.8.0 отримав методи для перевірки завдань у всіх чергах одним викликом, нові події паузи та відновлення воркерів, метод assertSessionMissingInput() для тестування, підтримку enum SortDirection у конструкторі запитів та низку інших покращень:
- Методи інспектування черг:
allReservedJobs(),allDelayedJobs()таallPendingJobs() - Події
WorkerPausingтаWorkerResuming - Тестове твердження
assertSessionMissingInput() - Підтримка
SortDirectionenum дляorderBy()та суміжних методів - Фільтр середовища (Environment) для команди
schedule:list - Кастомні дії
onDelete()/onUpdate()для зовнішніх ключів - Мідлвари в атрибутах тепер об'єднуються з мідлварами маршрутів
- Драйвер Mail за замовчуванням тепер приймає backed enums
- Іменовані провайдери облікових даних для підключень SQS
- Численні виправлення типів та покращення docblock
# Що нового
# Методи інспектування всіх черг
Раніше методи Queue::reservedJobs(), Queue::delayedJobs() та Queue::pendingJobs() вимагали назву конкретної черги. Щоб перевірити кілька черг, доводилося створювати ланцюжки викликів. У новій версії додано методи allReservedJobs(), allDelayedJobs() та allPendingJobs(), які дозволяють отримати завдання з усіх черг одночасно:
// Раніше — окремий запит для кожної черги
Queue::reservedJobs('queue1')
->merge(Queue::reservedJobs('queue2'))
->merge(Queue::reservedJobs('queue3'));
// Тепер — один виклик для всіх черг
Queue::allReservedJobs();
Queue::allDelayedJobs();
Queue::allPendingJobs();
Кожен метод повертає колекцію екземплярів InspectedJob із властивостями uuid, name, attempts та createdAt. Це корисно під час розгортання, коли потрібно переконатися, що жодне завдання не виконується перед зупинкою воркерів. Методи працюють із драйверами database, Redis та fake.
PR: #59997
# Події паузи та відновлення воркерів
Додано дві нові події — WorkerPausing та WorkerResuming. Вони спрацьовують, коли воркер черги отримує сигнали SIGUSR2 або SIGCONT відповідно. Це дозволяє краще відстежувати стан воркерів, наприклад, для логування або сповіщень під час деплою.
PR: #59895
# Тестове твердження assertSessionMissingInput()
У TestResponse з'явився метод assertSessionMissingInput(), що є протилежністю до assertSessionHasInput(). Він приймає назву поля або масив назв:
$response->assertSessionMissingInput('name');
$response->assertSessionMissingInput(['connection_id', 'repository', 'source_branch']);
PR: #59970
# SortDirection Enum у конструкторі запитів
Слідом за підтримкою в колекціях (версія 13.7.0), методи конструктора запитів, такі як orderBy(), orderByDesc() та orderByRaw(), тепер підтримують нативний PHP-enum SortDirection (з'явився у PHP 8.6):
use SortDirection;
DB::table('users')
->orderBy('name', SortDirection::Descending)
->get();
PR: #59865
# Фільтр оточення для schedule:list
Команда Artisan schedule:list тепер підтримує опцію --environment для фільтрації запланованих завдань за середовищем їх виконання:
php artisan schedule:list --environment=production
Це дозволяє на продакшні бачити лише ті команди, які дійсно будуть запущені, ігноруючи завдання для local або staging.
PR: #59993
# Кастомні дії onDelete()/onUpdate() для зовнішніх ключів
Клас ForeignKeyDefinition тепер приймає довільні рядки для onDelete() та onUpdate(), не обмежуючись стандартними cascade, restrict, no action та set null. Це вирішує проблему сумісності з PHPStan при використанні специфічного синтаксису PostgreSQL для композитних ключів:
$table->foreign(['document_id', 'client_id'])
->references(['id', 'client_id'])
->on('documents')
->onDelete('set null (document_id)');
PR: #59986
# Об'єднання мідлварів з атрибутів та маршрутів
Раніше атрибут #[Middleware] у контролері ігнорувався, якщо для маршруту були визначені інші мідлвари. Тепер мідлвари з атрибутів об'єднуються з іншими правилами, а не перезаписуються ними.
PR: #59944
# Іменовані провайдери облікових даних для SQS
З'єднання SQS тепер підтримують іменовані AWS credential providers. Це дозволяє використовувати конкретні профілі або ланцюжки облікових даних, визначені в AWS SDK, замість обмеження лише змінними оточення чи метаданими інстансу:
// config/queue.php
'sqs' => [
'driver' => 'sqs',
'credentials' => 'my-named-provider',
// ...
],
PR: #59754
# Підтримка Enums у драйвері пошти
Метод MailManager::setDefaultDriver() тепер приймає backed enums разом із рядками, що уніфікує його роботу з методами mailer() та driver():
Mail::setDefaultDriver(MailDriver::Smtp);
PR: #59973
# Виправлення та покращення
Цей реліз містить велику кількість виправлень анотацій типів та покращень docblock для конструкторів схем, кешу, фабрик та колекцій. Також виправлено роботу з протермінованими блокуваннями у DatabaseLock::isLock, роботу макросів зі статичними замиканнями та підтримку UnitEnum у ModelNotFoundException. Крім того, виправлено TTL для лімітера запитів та типи для методів freezeTime і travelTo.
Посилання