Чим відрізняються 7.4 і 8.1

← Чим відрізняються 7.4 і 8.1

Ashterix

docs(articles): SEO titles, intros and a section preview image for From Magento to Symfony

uk/articles/magento-to-symfony/practice/versions.md +6 −0

Чим відрізняються 7.4 і 8.1

Symfony 7.4 LTS і 8.x мають однакові можливості, різниця — у застарілому коді, строках підтримки й мінімальній версії PHP. Коротко про те, що обрати для нового проєкту і як оновлюватися.

Станом на 27.10.2026, за даними symfony.com/releases.

Symfony 7.4 і 8.0 вийшли одночасно в листопаді 2025 з однаковими можливостями. Різниця лише в застарілому коді: 7.4 зберігає всі шари сумісності гілки 7.x, а 8.0 їх прибрав. Тобто 8.0 — це 7.4 без deprecations. 8.1 вийшла в травні 2026 і додала нові можливості поверх 8.0. Обіцянка зворотної сумісності діє, тож перехід з 8.0 на 8.1 не потребує змін коду.

Аспект 7.4 LTS 8.1
Вихід листопад 2025 травень 2026
Тип релізу LTS, остання мінорна версія гілки 7.x звичайний мінорний реліз гілки 8.x
Підтримка bug fixes до листопада 2028, security до листопада 2029 до січня 2027; далі 8.2 (очікується в листопаді 2026), 8.3, 8.4 LTS (очікується в листопаді 2027)
PHP 8.2+ 8.4+
Застарілий код працює, пише deprecations у лог прибраний у 8.0
Нові можливості не з'являться аж до 8.4 LTS кожні пів року в новій мінорній версії
XML-конфіг контейнера й роутингу працює, але застарів прибраний; лишаються YAML, PHP і атрибути

Що ламається при переході з 7.4 на 8.x

  • PHP 8.4. Без нього Composer не поставить жодного пакета 8.x.
  • Простори імен Annotation. Symfony\Component\Routing\Annotation\Route більше не працює, маршрути з ним просто зникають. Потрібен Symfony\Component\Routing\Attribute\Route, так само для інших атрибутів.
  • Обмеження з масивом опцій. new Assert\Length(['max' => 800]) треба переписати з іменованими аргументами: new Assert\Length(max: 800).
  • XML-конфіг. Сервіси й маршрути в XML треба перенести в YAML, PHP або атрибути.
  • Залежності. Кожен бандл у composer.json має дозволяти Symfony 8. Пакет, обмежений ^7.0, блокує оновлення, поки автори не випустять сумісну версію.

Найнадійніший спосіб знайти все це в своєму коді — прогнати тести на 7.4 з виводом deprecations і прибрати кожну. Пряму deprecation виправляєте у своєму коді, непряму (з vendor/) — оновленням пакета. Масові заміни зручно робити Rector-ом.

Symfony · шлях 7.4 → 8.x

vendor/bin/phpunit --display-deprecations   # на 7.4: прибрати кожну deprecation
composer require "symfony/*:^8.1"           # або змінити обмеження в composer.json і composer update "symfony/*"
bin/console cache:clear
vendor/bin/phpunit

Що нового в 8.1

Область Що з'явилося Чим корисно
Застосунки без HTTP повний DI-контейнер без HttpKernel воркери й консольні процеси без HTTP-шару
Console кілька команд в одному класі (method-based commands); резолвери аргументів, що перетворюють вхід на типізовані значення й об'єкти менше класів-обгорток для консольних точок входу
Messenger пакетне отримання (--fetch-size), пріоритети AMQP, розумніші ретраї, налаштовуваний reset (--no-reset приймає число) дешевші воркери на великих чергах
DependencyInjection ліниве завантаження env для довгоживучих воркерів, стекова декорація, decorates_tag, глибша інтеграція з #[Target] декоратори для цілої групи тегованих сервісів
Validator нові обмеження, підтримка Clock, reentrant-валідатори валідація дат через Clock тестується без реального часу
HttpClient persistent cURL, Guzzle handler, власний DNS, SSRF allow-list, мок на окремий клієнт швидші виклики суміжних сервісів, простіші тести інтеграцій
RateLimiter атрибут #[RateLimit], режим вікна за календарем обмеження частоти запитів прямо на контролері, без власного слухача
HTTP-контролери атрибут #[Serialize] для відповіді, розширений #[Cache], файли й variadic у мапінгу payload, мапінг заголовків запиту менше коду в контролерах API
Нові компоненти DeepCloner (глибоке клонування графів об'єктів), Tui (повноекранні термінальні інтерфейси) DeepCloner — для знімків стану в тестах і кешах
Профайлер «Copy as cURL» для запиту, доступніший toolbar, розумніші debug:* запит з профайлера легко відтворити в терміналі

Що обрати

  • Новий проєкт — 8.x. Оновлюйтеся кожні пів року: 8.1 → 8.2 → 8.3 → 8.4 LTS. Мінорні оновлення не ламають код, а 8.1 підтримується лише до січня 2027.
  • Застосунок, який роками не оновлюватимуть — 7.4 LTS: security-фікси до листопада 2029, але жодних нових можливостей.
  • Перехід з 7.4 — спершу нуль deprecations на 7.4, потім одразу на актуальну 8.x, минаючи 8.0: її підтримка закінчилася в липні 2026.