Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас Реклама
Новини 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

Читати в документації

Коментарі

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

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

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

Filament v5.10.0
Новини 12 жовтня 2026

Filament v5.10.0: сітка в rich editor, скелетони таблиць і десятки виправлень

Вийшов Filament v5.10.0: елементи керування сіткою в rich editor, допоміжний контент для віджетів-графіків, скелетони завантаження таблиць, submitOnCompletion() для OneTimeCodeInput та багато виправлень авторизації, доступності й стану.

17
Laravel AI SDK на практиці
Новини 09 жовтня 2026

Laravel AI SDK на практиці: агент, що стоїть за There There

Фрік Ван дер Гертен розповідає, як у Spatie побудували AI-шар хелпдеска There There на Laravel AI SDK: клас агента, інструменти з типізованою JSON-схемою та делегування роботи звичайним domain-діям.

12

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

Z Global E-Commerce
16 днів тому

Full-Stack Developer (PHP/Laravel + Vue 3)

Full-Stack розробник з глибоким досвідом бекенду. Розробляєте масштабовані веб-платформи з комплексною бізнес-логікою, працюєте з PHP/Laravel, SQL, Vue 3/TypeScript. Основні вимоги: досвід з Laravel, Eloquent, проектування API, оптимізація баз даних (включно з мільйонами записів), фронтенд на Vue 3 з Composition API, TypeScript. Цінується розуміння архітектури, продуктивності й довгострокової підтримуваності коду.

Wooden Sword
17 днів тому

Senior PHP Developer (Game Backend)

Розробник backend для мобільної RPG з високим навантаженням. Основний стек: PHP Laravel API та TypeScript Nakama Game Server. Відповідальність за повний цикл розробки функцій — від логіки до тестування, code review, оптимізації та документації. Вимоги: 5+ років backend-досвіду, бездоганне знання Laravel/PHP, сильні навички TypeScript, PostgreSQL та асинхронного програмування.

Kredyt Kapital
17 днів тому

Middle Full-Stack Developer (PHP / Laravel / Vue / React)

Middle Full-Stack Developer для розробки внутрішніх IT-продуктів. Основний стек: PHP 8.3+, Laravel, PostgreSQL, REST API, Vue.js/React. Розробник займатиметься backend (бізнес-логіка, Eloquent, Jobs/Queues) і frontend (компоненти, інтерфейси), інтеграціями та оптимізацією. Вимоги: 2-3+ років комерційного досвіду з PHP, 2+ років практики з Laravel, впевнене знання PostgreSQL, Git, JavaScript ES6+.

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

Laravel Medialibrary

spatie/laravel-medialibrary

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

6,164 11.23.9 13 8

Browsershot

spatie/browsershot

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

5,244 5.4.0 8