У Laravel v13.7.0 з’явився інтерфейс Interruptible для черг завдань, директива @fonts для оптимізації шрифтів у Vite, пакетна перевірка JSON-шляхів у тестах та підтримка перерахувань SortDirection у колекціях.
- Завдання тепер можуть реагувати на сигнали воркера через інтерфейс
Interruptible - Нова подія
WorkerInterruptedдля моніторингу - Директива
@fontsта механізм оптимізації шрифтів у Vite - Пакетні перевірки JSON-шляхів у
TestResponse - Підтримка
SortDirectionenum для колекцій та класуArr - Підтримка Enum у методі
keyBy()дляLazyCollection - Різноманітні виправлення та покращення продуктивності
# Що нового
# Реакція завдань на сигнали воркера
Завдання в черзі тепер можуть реалізовувати інтерфейс Interruptible. Це дозволяє тривалим процесам коректно завершувати роботу або встановлювати прапор зупинки, коли воркер отримує сигнал (наприклад, SIGTERM):
use Illuminate\Contracts\Queue\Interruptible;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Queue\Queueable;
class ReportJob implements ShouldQueue, Interruptible
{
use Queueable;
protected bool $stop = false;
public function handle(): void
{
while (! $this->stop) {
// виконання роботи...
}
}
public function interrupted(int $signal): void
{
$this->stop = true;
}
}
PR: #59833
# Директива @fonts та оптимізація шрифтів у Vite
Цей реліз додає директиву Blade @fonts та метод Vite::fonts() для рендерингу посилань preload та інлайнових стилів. Функція використовує маніфести шрифтів від Vite і дозволяє вибірково завантажувати окремі сімейства.
Базове використання у шаблоні:
<!DOCTYPE html>
<html>
<head>
@fonts
@vite('resources/js/app.js')
</head>
<body>
{{ $slot }}
</body>
</html>
Це автоматично додасть теги <link> для прелоаду та блок <style> з усіма правилами @font-face та CSS-змінними.
Ви також можете завантажувати лише конкретні шрифти:
{{-- Завантажити одне сімейство --}}
@fonts('sans')
{{-- Завантажити кілька сімейств --}}
@fonts(['sans', 'mono'])
PR: #59584
# Пакетна перевірка JSON-шляхів у TestResponse
Для тестування додано методи assertJsonPaths() та assertJsonMissingPaths(), що дозволяють перевіряти кілька значень JSON одночасно.
Раніше:
$response->assertJsonPath('data.id', 1)
->assertJsonPath('data.name', 'Taylor')
->assertJsonPath('meta.count', 3);
Зараз:
$response->assertJsonPaths([
'data.id' => 1,
'data.name' => 'Taylor',
'meta.count' => 3,
]);
Метод assertJsonMissingPaths() працює аналогічно для перевірки відсутності ключів:
$response->assertJsonMissingPaths(['password', 'secret_token']);
PR: #59829
# Підтримка SortDirection Enum у колекціях
Колекції та клас Arr тепер підтримують перерахування SortDirection, що забезпечує кращу типізацію при сортуванні:
use SortDirection;
$sorted = $collection->sortBy('name', descending: SortDirection::Descending);
PR: #59859
# Подія WorkerInterrupted
Нова подія WorkerInterrupted спрацьовує, коли воркер отримує сигнал зупинки. Це корисно для моніторингу: можна логувати події або надсилати сповіщення, навіть якщо саме завдання не реалізує інтерфейс Interruptible.
PR: #59848
# Метод isLocked у класі Lock
У клас Lock додано метод isLocked() для швидкої перевірки статусу блокування.
PR: #59791
# Підтримка Enum у LazyCollection keyBy()
Метод LazyCollection::keyBy() тепер приймає BackedEnum, що відповідає поведінці звичайних Collection. Раніше передача enum викликала помилку при спробі перетворення в рядок.
PR: #59809
# Інші виправлення
Оновлення включає покращену роботу з enum у ConcurrencyManager, QueueManager, LogManager, SessionManager та RedisManager. Також додано уточнення в docblocks, виправлено типи та усунено баги, знайдені спільнотою.
Нотатки щодо оновлення
Критичних змін для типових застосунків немає. Подробиці по кожному PR доступні в журналі змін.
Посилання