Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти
Інше
Події Про нас
Новини 23 липня 2026

Laravel 13.21: атрибут RouteKey для моделей, валідація base64 та розширення можливостей Image

Команда Laravel випустила версії 13.21.0 та 13.21.1 21 липня 2026 року. Патч-версія лише оновлює константу версії фреймворку, тому обидва релізи розглядаються разом. Оновлення додає кілька нових можливостей, включно з атрибутом #[RouteKey] для Eloquent моделей, правилом валідації base64, атрибутом #[RequestAttribute] для контекстного впровадження, а також розширеними форматами виводу у компоненті Image.

Атрибут #[RouteKey] для Eloquent моделей

Раніше налаштування колонки для route model binding вимагало перевизначення методу getRouteKeyName() у моделі. Слідуючи патерну, закладеному атрибутами #[ObservedBy] та #[ScopedBy], тепер можна оголошувати ключ маршруту за допомогою атрибуту класу:

use Illuminate\Database\Eloquent\Attributes\RouteKey;

#[RouteKey('slug')]
class Post extends Model
{
    // ...
}

З цим атрибутом неявне прив'язування моделі до маршруту визначає Post за колонкою slug, а getRouteKeyName() повертається до первинного ключа, якщо атрибут відсутній. Внесок від @nimnaherath у PR #60841.

Правило валідації base64

До перевірок формату рядків валідатора додалося правило base64, яке заповнює прогалину, вже покриту бібліотеками на кшталт Zod. Правило перевіряє, що значення є валідним Base64 рядком згідно RFC 4648:

$request->validate([
    'signature' => ['required', 'base64'],
]);

Перевірка вимагає канонічного кодування: значення має декодуватися у суворому режимі та повторно кодуватися точно в той самий рядок, тому помилки padding та зайві символи провалюють валідацію. Внесок від @lucasmichot у PR #60808.

Контекстний атрибут #[RequestAttribute]

Міжпрограмне забезпечення часто зберігає визначені об'єкти у мішку атрибутів запиту, наприклад, орендаря чи організацію, визначені з API ключа. Отримання їх назад означало виклик $request->attributes->get() та ручне вказування типу. Новий контекстний атрибут #[RequestAttribute] безпосередньо впроваджує значення у визначений параметр:

use Illuminate\Container\Attributes\RequestAttribute;

class InventoryController
{
    public function index(#[RequestAttribute('org')] Organization $org)
    {
        return $this->inventoryService->getForOrg($org);
    }
}

Внесок від @cosmastech у PR #60847.

Додаткові формати виводу для компонента Image

Компонент Image, представлений у Laravel 13.20, міг конвертувати лише у WebP, JPG та JPEG через свої гнучкі методи, навіть незважаючи на те, що вбудовані кодери Intervention Image підтримують більше форматів. Цей реліз додає toPng(), toGif(), toAvif() та toBmp():

use Illuminate\Support\Facades\Image;

Image::fromUpload($request->file('avatar'))
    ->cover(400, 400)
    ->toAvif()
    ->quality(80)
    ->store('avatars');

Зміна також виправляє Image::extension(), якому бракувало відповідності MIME image/avif і який би створював розширення .bin для збереженого AVIF виводу. Внесок від @Tresor-Kasenda у PR #60713.

Налаштовуваний Application Builder

Раніше Application::configure() жорстко кодував клас ApplicationBuilder, тому пакунки, що розширюють Application Laravel, мали перевизначати весь метод для його заміни. Тепер захищена статична властивість $applicationBuilder дозволяє підкласам надавати власний клас білдера, зберігаючи існуючий API. Див. PR #60848.

Subsplit для Concurrency

Компонент Illuminate\Concurrency тепер має власний subsplit лише для читання, приєднуючись до інших компонентів Illuminate, опублікованих як окремі пакунки. Див. PR #60836.

Інші виправлення та покращення

  • Колбеки відкату транзакцій бази даних тепер спрацьовують коректно (PR #60777), додано виявлення нового повідомлення про втрату з'єднання для автоматичного перепідключення (PR #60819)
  • Знаки питання екрануються у Grammar::whereColumn() (PR #60832)
  • Повідомлення InvalidPayloadException тепер включають назву завдання та чергу (PR #60799)
  • Передача enum до LogManager::forgetChannel() більше не викидає TypeError (PR #60801), а RedisTaggedCache::decrement() обробляє ключі enum (PR #60821)
  • Str::wordWrap() коректно обробляє багатобайтові рядки (PR #60814)
  • Кешування контекстних атрибутів більше не конфліктує між властивостями одного класу (PR #60815), а хибні параметри винятків concurrency зберігаються (PR #60822)
  • Виправлено парсинг порту хосту в команді serve (PR #60828) та невизначений індекс у Pipeline\Hub::pipe() (PR #60802)
2

Коментарі

Увійдіть, щоб залишити коментар

Будьте першим, хто залишить коментар!

Читайте також

Laracon US 2026: відео першого дня вже доступне Рекомендовано
Новини 29 липня 2026

Laracon US 2026: відео першого дня вже доступне

У Бостоні стартував Laracon US 2026, і запис першого дня вже доступний. Головне з кейноуту: офіційний Laravel LSP для редакторів, Laravel Cloud деплоїть Hono, Flask, Go та Rails, Pest 5 із Tia Engine. Аарон Френсіс приєднався до команди Laravel.

Pest 5: Tia Engine, плагін для AI-агентів і evals для LLM
Новини 29 липня 2026

Pest 5: Tia Engine, плагін для AI-агентів і evals для LLM

На першому дні Laracon US 2026 Нуно Мадуро представив Pest 5. Головне - Tia Engine, що переганяє лише зачеплені змінами тести й скорочує десятихвилинний прогін до кількох секунд, плюс плагіни для AI-агентів, evals, PHPStan і Rector.

Вакансії за темою

Foxstone
6 дн. тому

Senior PHP Backend Developer (AI-First) - Laravel

Senior PHP Backend Developer з фокусом на AI-інструменти. Розробка масштабованих Laravel backend-додатків з TDD підходом (Pest/PHPUnit), розгортання на GCP (Cloud Run, Cloud SQL), оптимізація бази даних та написання високобезпечного коду. Вимагається 5+ років досвіду PHP/Laravel, hands-on GCP, практичний досвід AI-агентів (Gemini, Copilot, Cursor) для прискорення розробки.

Cargofy Inc.
9 дн. тому

Backend Engineer (PHP/Laravel)

Backend Engineer для AI-платформи логістики на PHP/Laravel. Розробка високонавантажених сервісів, API, event-driven пайплайнів для обробки сотень тисяч транзакцій щодня. Стек: PHP 8.x, Laravel, PostgreSQL, Redis, Horizon. Вимоги: 3+ років досвіду, глибоке розуміння Laravel, оптимізація високонавантажених систем, роботи з AI модулями. Самостійність і проактивність обов'язкові.

Пакети за темою

Laravel Medialibrary

spatie/laravel-medialibrary

Пакет для асоціювання файлів з Eloquent-моделями. Надає зручний інтерфейс для управління медіа-файлами, пов'язаними з вашими моделями бази даних.

6,154 11.23.3 13 6

Browsershot

spatie/browsershot

Конвертуй веб-сторінку в зображення або PDF, використовуючи headless Chrome.

5,235 5.4.0 7