Реліз Laravel 13.19.0 завершує впровадження підтримки HTTP-методу QUERY у HTTP-клієнті та тестових хелперах, а також додає низку покращень для роботи з колекціями, рядками та чергами завдань поряд із звичними виправленнями помилок.
Ключові нововведення
Метод Http::query() для HTTP-клієнта
HTTP-клієнт отримав новий метод query() для надсилання запитів із HTTP-дієсловом QUERY, яке передає параметри в тілі запиту, а не в URL. Цей метод працює аналогічно до існуючих post(), put() та patch(), за замовчуванням надсилаючи JSON або дані у форматі form-encoded при виклику asForm().
$response = Http::query('https://api.example.com/search', [
'filter' => ['status' => 'active'],
]);
Існуюча обробка URL-параметрів залишається незмінною: методи withQueryParameters() та аргумент $query для get() продовжують працювати як і раніше.
Тестові хелпери query() та queryJson()
Для тестування маршрутів, що відповідають на QUERY-запити, додано відповідні хелпери query() та queryJson(). Вони працюють аналогічно до специфічних методів на кшталт delete() та deleteJson(), розміщуючи тестові дані в тілі запиту.
Route::match(['QUERY'], '/search', fn () => request()->input('filter'));
$this->queryJson('/search', ['filter' => 'active'])->assertOk();
Метод колекції reduceInto()
Новий метод reduceInto() є варіантом reduce() для випадків, коли потрібно мутувати акумулятор на місці замість повернення нового значення на кожній ітерації. Колбек отримує акумулятор та поточний елемент, а його повернене значення ігнорується, тому об'єктні акумулятори не потребують return:
$stats = $orders->reduceInto(new OrderStats, function ($stats, $order) {
$stats->total += $order->amount;
$stats->count++;
$stats->largest = max($stats->largest, $order->amount);
});
Для масивів або скалярних акумуляторів слід передавати акумулятор за посиланням:
$tagsMap = $posts->reduceInto([], function (&$map, $post) {
$post->tags->each(fn ($tag) => $map[$tag][] = $post->title);
});
Хелпер для рядків counted()
Метод Str::counted() та його еквівалент для Stringable формують множину слова та додають числівник одним викликом - це скорочений запис для plural($count, prependCount: true):
str('order')->counted(1); // "1 order"
str('order')->counted(2); // "2 orders"
Покращення черг завдань
Масові відправлення до SQS тепер використовують API SendMessageBatch замість окремого виклику для кожного завдання, що скорочує кількість запитів при додаванні багатьох завдань одночасно. Фейк черги тепер може інспектувати зарезервовані завдання, тож тести можуть перевіряти завдання, які взято в обробку, але ще не завершено.
Інші виправлення та покращення
Серед додаткових змін:
- Передача параметра
deletedAtColumn у методи assertSoftDeleted() та assertNotSoftDeleted()
- Можливість визначати параметри конфігурації пошти без імені
- Завершення значення стилю за замовчуванням крапкою з комою в методі
ComponentAttributeBag::merge()
- Додано тести для where-клаузів з відносними датами та методів past/future правила date
Повний список змін доступний у офіційному changelog та release notes.