Что нового в Laravel 12.51.0

Выпущена версия Laravel 12.51.0. Очередное обновление стабильной ветки фреймворка. Оно не содержит революционных изменений, но привносит полезные улучшения для уведомлений, валидации, работы с базой данных MySQL и других сценариев, с которыми разработчики сталкиваются ежедневно.

Новые возможности уведомлений

Раньше после отправки уведомления вам приходилось вручную слушать событие NotificationSent, чтобы выполнить дополнительные действия. Теперь в классах уведомлений можно прямо определить метод afterSending, который будет вызываться после отправки по каждому каналу (например, email или SMS).

class BookingNotification extends Notification
{
    public function __construct(public Booking $booking) {}

    public function via(): array
    {
        return ['mail'];
    }

    public function afterSending($notifiable, $channel, $response)
    {
        // Обновляем модель после отправки
        $this->booking->update(['notified_at' => now()]);
    }
}

Метод получает:

  • объект того, кому отправляется уведомление,

  • канал (mail, sms и т.п.),

  • ответ от сервиса отправки.

Это удобно, если нужно, например, пометить в базе, что уведомление ушло.

Fluently: валидация с whenFails() и whenPasses()

Методы валидации теперь поддерживают цепочки whenFails() и whenPasses(). Такой подход сокращает шаблонный код и делает обработку результатов валидации более выразительной, особенно вне HTTP-запросов. Например, в консольных командах или задачах очередей.

Validator::make(
    ['file' => $file],
    ['file' => 'required|image']
)->whenFails(function () {
    throw new InvalidArgumentException('Файл невалиден');
});

Этот пример заменяет явное условие if ($validator->fails()) и избавляет от лишних проверок.

Таймаут для запросов MySQL

Теперь можно указать ограничение времени выполнения запроса к MySQL прямо в конструкторе запросов. Laravel добавил метод timeout(), который вставляет подсказку MAX_EXECUTION_TIME в SQL.

Student::query()
    ->where('email', 'like', '%example.com')
    ->timeout(60) // таймаут в секундах
    ->get();

Это полезно, если вы хотите ограничить время медленных запросов. Если вы хотите применять такой таймаут всегда для определённой модели, это можно сделать через глобальную область (scope).

Ленивое вычисление значений в firstOrCreate и createOrFirst

Методы firstOrCreate и createOrFirst теперь принимают замыкания (closures) для второго аргумента. Это позволяет отложить тяжёлые вычисления до фактической необходимости.

$location = Location::firstOrCreate(
    ['address' => $address],
    fn () => ['coordinates' => Geocoder::resolve($address)]
);

Если запись уже есть, замыкание вообще не будет выполнено. Это экономит время и ресурсы. Например, если геокодирование занимает заметное время.

Новые события, методы и улучшения

Помимо перечисленного, в Laravel 12.51.0 добавлены и другие изменения:

Событие BatchCancelled

Теперь при отмене батча (группы задач) выбрасывается событие BatchCancelled. Оно позволяет слушать и обрабатывать отмену во всей системе, а не вручную отслеживать её в каждом месте.

Удобная подстановка подзапросов в обновлениях

Раньше для использования построителя запросов (Eloquent) в качестве подзапроса в update() приходилось вручную приводить его к базовому запросу. Теперь это не требуется т.к. Eloquent умеет автоматически подставлять такие подзапросы.

Управление HTTP-ответами

Добавлен метод withoutHeader(), который позволяет удалять заголовки из ответа. Это зеркально отражает уже существующий метод withoutCookie().

return response('OK')
    ->withoutHeader('X-Debug');

Мелкие улучшения и исправления

Laravel 12.51.0 также содержит множество исправлений и улучшений по всему фреймворку:

  • Улучшена работа тестов в пакетных задачах и изоляция кеша при параллельном тестировании.

  • Обновлены методы работы со строками и вспомогательными функциями.

  • Исправлены баги в локализации и очередях.

  • Улучшена работа HTTP-клиента.

Laravel 12.51.0 это преимущественно улучшение разработческого опыта. Новые возможности уведомлений, валидации, управления запросами и обновлений делают код чище и безопаснее, а повседневные задачи проще. Несмотря на то, что это не крупный релиз с большими функциями, каждое из изменений это шаг к более удобной разработке.

Комментарии (0)

Войдите, чтобы оставить комментарий

Похожие статьи

Что такое Self-Signed SSL‑сертификат и когда он нужен

Подробная пошаговая инструкция по созданию самоподписанного SSL‑сертификата и его интеграции в Nginx на Ubuntu 24.04. Описаны установка, генерация ключей и настройка HTTPS.

Прямая итерация Fluent-объектов в Laravel

Обзор обновления Laravel, в котором Fluent-объекты получили поддержку прямой итерации через Iterable-контракт. Объясняется, почему это улучшение упрощает код и делает работу с данными более естественной.