Laravel 13.19 расширяет поддержку HTTP-метода QUERY в HTTP-клиенте и средствах тестирования, а также включает несколько улучшений для коллекций, строковых помощников и очередей, помимо традиционных исправлений.
В этом релизе появились:
поддержка метода
Http::query()для отправки HTTP-запросов с методом QUERY;методы
query()иqueryJson()для HTTP-тестов;новый метод коллекций
reduceInto();метод
counted()дляStrиStringable;пакетная отправка сообщений в Amazon SQS через
SendMessageBatchи возможность проверки зарезервированных заданий в Queue Fake.
Метод Http::query()
HTTP-клиент Laravel получил новый метод query(), предназначенный для отправки запросов с HTTP-методом QUERY. В отличие от обычных GET-запросов, параметры передаются в теле запроса, а не в URL.
По поведению новый метод аналогичен post(), put() и patch(): по умолчанию данные отправляются в формате JSON, а при использовании asForm() как данные формы.
$response = Http::query('https://api.example.com/search', [
'filter' => ['status' => 'active'],
]);При этом существующие способы передачи параметров запроса остаются без изменений. Методы withQueryParameters() и аргумент $query у get() продолжают работать так же, как и раньше.
Методы query() и queryJson() для тестирования
Вместе с новым методом HTTP-клиента Laravel добавляет поддержку QUERY-запросов и в средства тестирования.
Появились методы query() и queryJson(), которые работают аналогично delete() и deleteJson(), но предназначены для тестирования маршрутов, обрабатывающих HTTP QUERY. Передаваемые данные помещаются в тело запроса.
Route::match(['QUERY'], '/search', fn () => request()->input('filter'));
$this->queryJson('/search', ['filter' => 'active'])->assertOk();Метод reduceInto() для коллекций
Новый метод reduceInto() представляет собой альтернативу reduce() для случаев, когда аккумулятор изменяется "на месте", а не возвращается заново после каждой итерации. В функцию обратного вызова передаются аккумулятор и текущий элемент коллекции. Возвращаемое значение при этом игнорируется, поэтому при использовании объектов их не нужно возвращать вручную.
$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 и Stringable получили новый метод counted(). Он автоматически склоняет слово в зависимости от количества и сразу добавляет перед ним числовое значение.
Фактически это сокращённая запись вызова plural($count, prependCount: true).
str('order')->counted(1); // "1 order"
str('order')->counted(2); // "2 orders"Улучшения очередей
Laravel оптимизировал пакетную отправку сообщений в Amazon SQS. Теперь при массовой отправке используется API SendMessageBatch вместо выполнения отдельного запроса для каждого задания, что уменьшает количество обращений к сервису.
Кроме того, Queue Fake теперь позволяет проверять зарезервированные задания. Это даёт возможность писать тесты для задач, которые уже были получены обработчиком очереди, но ещё не завершили выполнение.
Другие исправления и улучшения
В Laravel 13.19 также вошли несколько дополнительных изменений:
параметр
deletedAtColumnтеперь передаётся в методыassertSoftDeleted()иassertNotSoftDeleted();параметры конфигурации почты теперь можно определять без указания имени;
значение стиля по умолчанию в
ComponentAttributeBag::merge()теперь корректно завершается точкой с запятой;добавлены тесты для условий с относительными датами и методов
past()иfuture()в правилах проверки дат.