У релізі Laravel 13.19.0 з’явилася повноцінна підтримка методу HTTP QUERY в HTTP-клієнті та інструментах для тестування. Також розробники додали корисні оновлення для колекцій, рядків та черг разом із традиційними виправленнями помилок.
- Метод
Http::query()для відправки запитів QUERY; - Хелпери
query()таqueryJson()для HTTP-тестування; - Метод колекцій
reduceInto()для мутації акумулятора; - Хелпер
counted()дляStrтаStringable; - Масове відправлення в SQS через
SendMessageBatchта інспекція зарезервованих завдань уQueueFake.
# Що нового
# Метод Http::query()
HTTP-клієнт отримав метод query() для запитів з використанням HTTP-дієслова QUERY. На відміну від GET, цей метод передає параметри в тілі запиту, а не в URL. Він працює аналогічно до post(), put() та patch(): за замовчуванням надсилає JSON або дані форми, якщо викликати asForm().
$response = Http::query('https://api.example.com/search', [
'filter' => ['status' => 'active'],
]);
Робота з параметрами в URL залишилася без змін: withQueryParameters() та аргумент $query у методі get() працюють як і раніше. Детальніше у #60663.
# Тестові хелпери query() та queryJson()
Для підтримки нових можливостей клієнта в набір для тестування додали методи query() та queryJson(). Вони дозволяють перевіряти маршрути, що очікують QUERY-запити, передаючи дані в тілі запиту подібно до методів delete() або deleteJson().
Route::match(['QUERY'], '/search', fn () => request()->input('filter'));
$this->queryJson('/search', ['filter' => 'active'])->assertOk();
Детальніше у #60662.
# Метод колекцій reduceInto()
reduceInto() — це варіація методу reduce() для випадків, коли ви змінюєте безпосередньо акумулятор, а не повертаєте нове значення на кожній ітерації. Callback отримує акумулятор та поточний елемент; результат виконання ігнорується, тому для об’єктів-акумуляторів 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);
});
Детальніше у #60651.
# Хелпер для рядків counted()
Метод Str::counted() та його аналог у Stringable дозволяють за один виклик змінити форму слова залежно від числа та додати саму кількість. Це зручне скорочення для plural($count, prependCount: true):
str('order')->counted(1); // "1 order"
str('order')->counted(2); // "2 orders"
Детальніше у #60649.
# Покращення черг (Queue)
Масове відправлення завдань в SQS тепер використовує SendMessageBatch API замість окремих запитів для кожного завдання. Це суттєво скорочує кількість мережевих запитів при великих навантаженнях (#60645). Крім того, QueueFake тепер вміє інспектувати зарезервовані завдання, що дозволяє тестувати процеси, які вже почалися, але ще не завершилися (#60644).
# Інші виправлення та покращення
- Передача
deletedAtColumnу методиassertSoftDeleted()таassertNotSoftDeleted()(#60657); - Можливість визначати параметри конфігурації пошти без вказання імені (#60668);
- Додавання крапки з комою в кінці значень стилів у
ComponentAttributeBag::merge()(#60665); - Нові тести для
where-умов із відносними датами та методівpast/futureу валідації дат (#60675, #60687).
Посилання