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

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

Коментарі

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

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

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

PayZephyr
Новини 12 вересня 2026

PayZephyr: Єдиний API для роботи з Stripe, Paystack та PayPal

PayZephyr - Laravel-пакет від Nwaneri Chukwunyere Kenneth, який об'єднує вісім платіжних провайдерів під одним зручним API. Підтримує автоматичне перемикання, захист від подвійної оплати, підписки та повернення коштів.

2
Laravel Telescope
Новини 11 вересня 2026

Artisan-команди для дебагу в Laravel Telescope 5.24.0

Laravel Telescope 5.24.0 додає дві нові Artisan-команди для роботи із записами із терміналу. Тепер можна переглядати запити, винятки, джоби та запити до бази даних без відкриття веб-інтерфейсу, а також отримувати дані у форматі JSON для скриптів та AI-агентів.

3

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

Гарант-Інфо
4 дні тому

Middle PHP Developer (Laravel)

Middle PHP Developer для міжнародного B2B-продукту у телекомунікаціях. Розробка нового функціоналу на PHP 8.x/Laravel, підтримка кодової бази, робота з REST API, платіжними інтеграціями та MySQL. Вимоги: 2+ років комерційного досвіду PHP, впевнене знання Laravel, ООП, SOLID, тестування (PHPUnit/Pest), Git, Docker.

N-iX
10 днів тому

Senior Full Stack Engineer (CMS PHP + Vue)

Розробка та підтримка custom модулів на PHP-базованій CMS-платформі для workflow-рішень. Основні завдання: реалізація бізнес-логіки, систем сповіщень, контролю доступу; інтеграція з Vue 3-фронтендом; робота у монолітному кодбейсі з кількома командами. Вимоги: 5+ років досвіду з PHP-CMS, знання Vue 3, незалежна розробка backend-фіч зі мінімальним архітектурним наглядом.

KAWORKS
10 днів тому

Senior Full Stack PHP Developer (Symfony)

Senior Full Stack PHP Developer для німецької компанії eHealth. Розробка та підтримка healthcare-продукту на Symfony 7.4, PHP 8.4. Вимоги: 5+ років PHP з глибоким знанням Symfony, інтеграція зовнішніх систем, тести, SOLID, MySQL/MariaDB, REST API, Docker. Потрібна англійська та прямолінійність у комунікації ризиків.

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

Laravel Medialibrary

spatie/laravel-medialibrary

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

6,163 11.23.7 13 8

Browsershot

spatie/browsershot

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

5,241 5.4.0 8