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

Laravel 13.20 отримав власну обробку зображень

Laravel 13.20.0 представляє власний компонент для обробки зображень із незмінним API на основі драйверів, який дозволяє трансформувати зображення з файлових завантажень, сховища, URL або байтів. Реліз також включає атрибут #[WithoutMiddleware] для контролерів, виділений префікс сесій для Redis та низку доповнень для Eloquent і черг.

Власна обробка зображень через Image-фасад

Laravel 13.20 представляє компонент Illuminate\Image, який обробляє зміну розміру, обрізання, конвертацію форматів та збереження без використання сторонніх бібліотек-обгорток.

Зображення є незмінними: кожна трансформація повертає новий екземпляр, а всі перетворення застосовуються лише тоді, коли ви запитуєте результат.

Найчастіше робота починається з завантаження файлу. Метод Request::image() повертає екземпляр Image для вказаного ключа файлу або null, якщо ключ не містить завантаженого файлу:

$request->image('avatar')
    ->cover(200, 200)
    ->toWebp()
    ->store('avatars');

Також можна створити зображення зі шляху, URL, сирих байтів, base64 або диска сховища:

Image::fromPath('/path/to/photo.jpg');
Image::fromUrl('https://example.com/photo.jpg');
Image::fromBytes($bytes);
Image::fromStorage('photos/avatar.jpg', 's3');
Storage::disk('s3')->image('photos/avatar.jpg');

Усі методи трансформації, параметри виводу та інспекції доступні на екземплярі:

// Трансформації
$image->cover(200, 200);
$image->contain(800, 600);
$image->crop(200, 200);
$image->resize(1024, 768);
$image->scale(1200, 800);
$image->rotate(90);
$image->blur(10);
$image->sharpen(10);
$image->grayscale();
$image->flip();
$image->flop();
$image->orient(); // Застосовує EXIF-обертання

// Формат виводу та якість
$image->toWebp();
$image->toJpg()->quality(80);
$image->optimize(); // WebP з якістю 70
$image->optimize('jpg', 85);

// Читання та інспекція
$image->toBytes();
$image->toBase64();
$image->toDataUri();
$image->width();
$image->height();
$image->dimensions();
$image->mimeType();
$image->extension();

Оскільки екземпляри незмінні, можна створювати кілька варіантів від одного вихідного зображення:

$image = $request->image('photo');
$image->cover(200, 200)->toWebp()->store('thumbnails');
$image->grayscale()->toWebp()->store('grayscale');

Компонент постачається з двома драйверами на основі Intervention Image v4: GD та Imagick. Можна обирати драйвер для кожного зображення окремо, а фасад Image дозволяє перевизначати обробку конкретних трансформацій:

use Illuminate\Image\Transformations\Sharpen;

// Вибір драйвера для конкретного зображення
$image->using('imagick');
$image->usingGd();
$image->usingImagick();

// Перевизначення обробки трансформації драйвером
Image::transformUsing('gd', Sharpen::class, function ($image, Sharpen $sharpen) {
    // Власна обробка sharpen для GD-драйвера
    return $image;
});

Intervention Image є рекомендованою, а не обов'язковою залежністю, тому потрібно встановити її окремо:

composer require intervention/image

Атрибут #[WithoutMiddleware] для контролерів

Атрибути маршрутизації отримали доповнення до #[Middleware]. Якщо останній прикріплює middleware до класу чи методу контролера, то #[WithoutMiddleware] виключає його, забезпечуючи функціонал "виключення middleware" на рівні атрибутів:

use App\Http\Middleware\EnsureTokenIsValid;
use Illuminate\Routing\Controllers\Attributes\Middleware;
use Illuminate\Routing\Controllers\Attributes\WithoutMiddleware;

#[Middleware(EnsureTokenIsValid::class)]
class UserController
{
    public function index()
    {
        // Middleware застосовується тут
    }

    #[WithoutMiddleware(EnsureTokenIsValid::class)]
    public function profile()
    {
        // Але не тут
    }
}

Збіг використовує ReflectionAttribute::IS_INSTANCEOF, тому підкласи middleware також виключаються.

Окремий префікс для сесій у Redis

Додатки, які вказують SESSION_DRIVER та CACHE_STORE на Redis, до цього часу успадковували префікс кешу для сесій, що ускладнювало виділення ключів сесій при очищенні або налагодженні спільного сховища. Нова опція prefix у config/session.php дозволяє встановити окремий префікс:

'prefix' => env('SESSION_PREFIX', Str::slug((string) env('APP_NAME', 'laravel')).'-session-'),

Сховище кешу клонується перед застосуванням префікса сесії, тому його встановлення не впливає на ключі кешу. Опція є опціональною та відповідає існуючому налаштуванню session.connection.

Тихе масове збільшення в Eloquent

Eloquent уже мав методи incrementQuietly() та decrementQuietly() для окремих стовпців. Цей реліз заповнює прогалину багатостовпцевих операцій методами incrementEachQuietly() та decrementEachQuietly(), які оновлюють кілька стовпців одразу без запуску подій моделі:

$user->incrementEachQuietly(['posts_count' => 1, 'points' => 10]);
$user->decrementEachQuietly(['credits' => 3, 'tokens' => 2]);

Enum як ключі WithoutOverlapping у чергах

Middleware завдань WithoutOverlapping тепер приймає PHP enum як ключ, тому завдання з перерахованим значенням більше не потребують ручного перетворення в рядок:

class UpdateCategory implements ShouldQueue
{
    use Queueable;

    public function __construct(protected Category $category) {}

    public function middleware(): array
    {
        return [new WithoutOverlapping($this->category)];
    }
}

Зміна зворотно сумісна з існуючими рядковими ключами.

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

  • Додано callback-функції beforePushing() та afterPushing() для QueueFake, а MailFake::assertQueuedTimes() тепер публічний
  • Метод assertEmpty() доданий до фасаду Storage, а використання пам'яті тепер повідомляється в події WorkerStopping
  • Команда make:migration тепер генерує впорядковані timestamp-префікси без колізій
  • Атрибут #[SensitiveParameter] застосовується до параметрів із секретами, приховуючи їх зі stack trace
  • Параметр capitalize для методу Stringable::initials()
  • Str::containsAll() більше не повертає true для порожнього масиву пошукових елементів, а Number::forHumans() та abbreviate() більше не повертають -0 для малих від'ємних значень
  • Виправлення для BelongsToMany::touch() коли пов'язаний ключ не є id, TrustProxies з at:* та кількома проксі, і providesTemporaryUploadUrls() на S3-драйвері

Примітки щодо оновлення

Для типових додатків критичних змін не очікується. Драйвери компонента зображень залежать від intervention/image (^4.0), який є рекомендованим пакетом, тому встановіть його перед використанням фасаду Image. Переглядайте changelog для деталей кожного PR при оновленні.

14

Коментарі

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

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

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

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.

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

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 модулями. Самостійність і проактивність обов'язкові.

5Blue Software Нова
2 дн. тому

Senior AI Full-Stack Engineer

Senior Full-Stack Engineer з фокусом на AI-асистентів для розробки. Розроблятимете backend-сервіси (PHP/Laravel, RabbitMQ) та frontend (Vue.js), проектуватимете API, працюватимете з асинхронною обробкою, базами даних (MongoDB, PostgreSQL) та Docker. Вимагається досвід використання AI-кодингових інструментів (Claude, Cursor, Copilot), сильні навички архітектури та здатність швидко вивчати нові технології.

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

Laravel Medialibrary

spatie/laravel-medialibrary

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

6,154 11.23.3 13 6

Laravel Query Builder

spatie/laravel-query-builder

Легко будуйте Eloquent-запити на основі запитів від API.

4,455 7.3.0 13 9