- Опубликовано: 21 июн 2026
- 4
Laravel 13: нововведения и улучшения
Laravel 13 вышел 17 марта 2026 года — Тейлор Отвелл представил релиз на Laracon EU. Если вы привыкли к тому, что мажорные версии Laravel приносят болезненные миграции, этот релиз вас приятно удивит: команда сознательно сделала ставку на минимум ломающих изменений и максимум практической пользы. Большинство приложений на Laravel 12 обновляются буквально за считаные минуты.
Главная идея версии формулируется одной фразой: Laravel становится AI-native фреймворком. Искусственный интеллект здесь больше не сторонний пакет, прикрученный сбоку, а полноценная часть стека. Но обо всём по порядку.
Коротко о главном
- Минимальная версия PHP теперь 8.3 (поддержка вплоть до 8.5)
- Первый «родной» Laravel AI SDK: генерация текста, агенты, эмбеддинги, аудио и изображения
- Встроенная семантический (векторный) поиск прямо в query builder
- JSON:API ресурсы из коробки
- Усиленная защита от подделки запросов —
PreventRequestForgery - Маршрутизация очередей по классам через
Queue::route() - Расширенная поддержка PHP-атрибутов по всему фреймворку
- Метод
Cache::touch()для продления TTL без перезаписи значения - Практически отсутствуют ломающие изменения
Требование PHP 8.3
Laravel 13 отказывается от PHP 8.2 и требует минимум PHP 8.3. Это единственное изменение, затрагивающее инфраструктуру, — всё остальное происходит на уровне приложения и обратно совместимо.
Переход на 8.3 — не формальность: вы получаете типизированные константы классов, функцию json_validate(), более детальные исключения при работе с датами и оптимизации JIT. Если вы пока на 8.2, разумный порядок действий — сначала обновить рантайм, протестировать на staging, и только потом поднимать версию фреймворка.
Laravel AI SDK
Безусловно, главное событие релиза. Раньше доступный как бета-пакет, Laravel AI SDK стал первоклассным, стабильным компонентом фреймворка. Он предоставляет единый, провайдер-независимый API: из коробки работает с OpenAI и Anthropic, а переключение между провайдерами — это смена одного значения в конфиге, а не переписывание кода.
Базовый агент вызывается одной строкой:
use App\Ai\Agents\SalesCoach;
$response = SalesCoach::make()->prompt('Проанализируй этот разговор с клиентом...');
return (string) $response;
SDK умеет не только текст. Генерация изображений из текстового описания:
use Laravel\Ai\Image;
$image = Image::of('Пончик на кухонной столешнице')->generate();
$rawContent = (string) $image;
Синтез речи — для голосовых ассистентов, озвучки и функций доступности:
use Laravel\Ai\Audio;
$audio = Audio::of('I love coding with Laravel.')->generate();
$rawContent = (string) $audio;
И генерация эмбеддингов прямо из строки — основа для семантического поиска:
use Illuminate\Support\Str;
$embeddings = Str::of('Долина Напа славится своим вином.')->toEmbeddings();
Единый интерфейс абстрагирует различия между провайдерами, логику повторных попыток и нормализацию ошибок. Для продуктовых команд это означает, что AI-фичи можно строить внутри обычного Laravel-проекта, без самодельных слоёв абстракции.
Семантический и векторный поиск
В развитие AI-направления Laravel 13 приносит нативную поддержку векторного поиска прямо в query builder. Связка проектируется под PostgreSQL и расширение pgvector.
Схема рабочего процесса проста: вы генерируете эмбеддинги из строк через AI SDK, сохраняете их в базе, а затем ищете семантически близкие записи — не по точному совпадению ключевых слов, а по смыслу:
$documents = DB::table('documents')
->whereVectorSimilarTo('embedding', 'Лучшие винодельни долины Напа')
->limit(10)
->get();
По сути, это полноценный AI-конвейер поиска внутри Laravel-стека — без внешнего поискового сервиса для большинства сценариев.
JSON:API ресурсы
Теперь Laravel включает first-party JSON:API ресурсы, позволяющие легко отдавать ответы, соответствующие спецификации JSON:API. Они автоматически берут на себя сериализацию объектов-ресурсов, подключение связанных сущностей (relationship inclusion), разреженные наборы полей (sparse fieldsets), ссылки и корректные заголовки ответа.
Для команд, которые строят API для мобильных клиентов или партнёрских интеграций, это экономит время: стандартизированный формат ответа уменьшает количество кастомного кода разбора на стороне потребителя.
Усиленная защита от подделки запросов
Из соображений безопасности middleware защиты от подделки запросов был доработан и формализован как PreventRequestForgery. Он добавляет проверку запроса с учётом источника (origin-aware verification), сохраняя при этом совместимость с привычной токен-based защитой CSRF.
Подход стал двухслойным: проверка по источнику заметно труднее обходится, чем валидация только по токену. Важно, что изменение невидимо для пользователей и не требует правок в существующих формах или AJAX-запросах.
Маршрутизация очередей по классам
Laravel 13 добавляет Queue::route() — возможность задать правила маршрутизации очереди и соединения для конкретного класса задачи в одном центральном месте:
Queue::route(ProcessPodcast::class, connection: 'redis', queue: 'podcasts');
Раньше приходилось либо прописывать свойства очереди в каждом классе задачи, либо повторять конфигурацию при каждой отправке. Теперь всё собрано в сервис-провайдере.
Расширенные PHP-атрибуты
Laravel продолжает курс на декларативную конфигурацию через нативные PHP-атрибуты, перенося настройки прямо к классам и методам, которых они касаются. Это необязательная и полностью обратно совместимая возможность — конфигурация через свойства классов продолжает работать.
Среди новинок — атрибуты контроллеров и авторизации #[Middleware] и #[Authorize], а также атрибуты управления задачами в очередях: #[Tries], #[Backoff], #[Timeout], #[FailOnTimeout].
Например, middleware контроллера и проверку политики теперь можно объявить прямо на классе и методе:
<?php
namespace App\Http\Controllers;
use App\Models\Comment;
use App\Models\Post;
use Illuminate\Routing\Attributes\Controllers\Authorize;
use Illuminate\Routing\Attributes\Controllers\Middleware;
#[Middleware('auth')]
class CommentController
{
#[Middleware('subscribed')]
#[Authorize('create', [Comment::class, 'post'])]
public function store(Post $post)
{
// ...
}
}
Атрибуты также появились в Eloquent, событиях, уведомлениях, валидации, тестировании и сериализации ресурсов. Меньше шаблонного кода, конфигурация рядом с логикой, проще онбординг новых разработчиков и аудит безопасности.
Cache::touch() — продление TTL без перезаписи
Небольшое, но приятное улучшение. Раньше, чтобы продлить срок жизни записи в кэше, приходилось получить значение целиком и записать его обратно — два обращения ради обновления одного таймстампа. Новый метод Cache::touch() продлевает TTL элемента кэша без извлечения и повторного сохранения значения.
Прерываемые задачи и другие улучшения очередей
Появился интерфейс Interruptible: когда воркер очереди получает SIGTERM во время деплоя, выполняющаяся задача обычно не знает, что её вот-вот прервут. Теперь задача может отреагировать — остановить цикл, освободить блокировки, сохранить состояние — до завершения воркера:
use Illuminate\Contracts\Queue\Interruptible;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Queue\Queueable;
class SignalJob implements ShouldQueue, Interruptible
{
use Queueable;
protected bool $stop = false;
public function handle(): void
{
while (! $this->stop) {
sleep(1);
// Выполняем работу...
}
}
public function interrupted(int $signal): void
{
$this->stop = true;
}
}
По данным сторонних обзоров, в экосистему релиза также входят драйвер базы данных для Reverb (real-time без обязательной зависимости от Redis), аутентификация по passkeys и обновлённые стартовые наборы с командной мультиарендностью. Эти возможности стоит проверить по официальной документации перед использованием в продакшене.
Стоит ли обновляться
Команда Laravel честно говорит, что формулировка «zero breaking changes» относится к усилиям по обновлению для хорошо поддерживаемого кода на Laravel 12, а не к полному отсутствию поведенческих различий. Несколько изменений всё же могут затронуть продакшен, поэтому перед выкатом стоит прочитать upgrade-гайд и протестировать на staging.
Что касается сроков поддержки:
- Laravel 12 получает исправления багов до 13 августа 2026 и обновления безопасности до 24 февраля 2027
- Laravel 13 — исправления багов до Q3 2027 и обновления безопасности до 17 марта 2028
Спешки нет, но и откладывать смысла мало: порог входа низкий (PHP 8.3 — основное требование), а большинство популярных пакетов — Livewire, Inertia, Filament, пакеты Spatie — уже имеют поддержку Laravel 13. Перед обновлением проверьте релизы каждого пакета на GitHub.
Итог
Laravel 13 — это не революция архитектуры, а уверенный шаг в сторону AI-native разработки при сохранении главной ценности фреймворка: предсказуемости и простоты обновления. Родной AI SDK, векторный поиск, JSON:API ресурсы, усиленная безопасность и расширенные атрибуты вместе заметно расширяют то, что можно строить на Laravel, не усложняя ежедневную работу.
Если ваша команда уже на PHP 8.3 — обновляйтесь смело. Если на 8.2 — сначала поднимите рантайм, а потом фреймворк.
Источники: официальные Release Notes Laravel 13.x и Laravel News.
Была статья полезной: