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

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

Ashterix

docs(articles): From Magento to Symfony, a requalification guide grouped into sections

uk/articles/magento-to-symfony/practice/versions.md новий файл +55 −0

1 + # Чим відрізняються 7.4 і 8.1
2 +
3 + Станом на 27.10.2026, за даними [symfony.com/releases](https://symfony.com/releases).
4 +
5 + 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 не потребує змін коду.
6 +
7 + | Аспект | 7.4 LTS | 8.1 |
8 + |---|---|---|
9 + | Вихід | листопад 2025 | травень 2026 |
10 + | Тип релізу | LTS, остання мінорна версія гілки 7.x | звичайний мінорний реліз гілки 8.x |
11 + | Підтримка | bug fixes до листопада 2028, security до листопада 2029 | до січня 2027; далі 8.2 (очікується в листопаді 2026), 8.3, 8.4 LTS (очікується в листопаді 2027) |
12 + | PHP | 8.2+ | 8.4+ |
13 + | Застарілий код | працює, пише deprecations у лог | прибраний у 8.0 |
14 + | Нові можливості | не з'являться аж до 8.4 LTS | кожні пів року в новій мінорній версії |
15 + | XML-конфіг контейнера й роутингу | працює, але застарів | прибраний; лишаються YAML, PHP і атрибути |
16 +
17 + ## Що ламається при переході з 7.4 на 8.x
18 +
19 + - **PHP 8.4.** Без нього Composer не поставить жодного пакета 8.x.
20 + - **Простори імен `Annotation`.** `Symfony\Component\Routing\Annotation\Route` більше не працює, маршрути з ним просто зникають. Потрібен `Symfony\Component\Routing\Attribute\Route`, так само для інших атрибутів.
21 + - **Обмеження з масивом опцій.** `new Assert\Length(['max' => 800])` треба переписати з іменованими аргументами: `new Assert\Length(max: 800)`.
22 + - **XML-конфіг.** Сервіси й маршрути в XML треба перенести в YAML, PHP або атрибути.
23 + - **Залежності.** Кожен бандл у `composer.json` має дозволяти Symfony 8. Пакет, обмежений `^7.0`, блокує оновлення, поки автори не випустять сумісну версію.
24 +
25 + Найнадійніший спосіб знайти все це в своєму коді — прогнати тести на 7.4 з виводом deprecations і прибрати кожну. Пряму deprecation виправляєте у своєму коді, непряму (з `vendor/`) — оновленням пакета. Масові заміни зручно робити Rector-ом.
26 +
27 + **Symfony** · шлях 7.4 → 8.x
28 +
29 + ```bash
30 + vendor/bin/phpunit --display-deprecations # на 7.4: прибрати кожну deprecation
31 + composer require "symfony/*:^8.1" # або змінити обмеження в composer.json і composer update "symfony/*"
32 + bin/console cache:clear
33 + vendor/bin/phpunit
34 + ```
35 +
36 + ## Що нового в 8.1
37 +
38 + | Область | Що з'явилося | Чим корисно |
39 + |---|---|---|
40 + | Застосунки без HTTP | повний DI-контейнер без HttpKernel | воркери й консольні процеси без HTTP-шару |
41 + | Console | кілька команд в одному класі (method-based commands); резолвери аргументів, що перетворюють вхід на типізовані значення й об'єкти | менше класів-обгорток для консольних точок входу |
42 + | Messenger | пакетне отримання (`--fetch-size`), пріоритети AMQP, розумніші ретраї, налаштовуваний reset (`--no-reset` приймає число) | дешевші воркери на великих чергах |
43 + | DependencyInjection | ліниве завантаження env для довгоживучих воркерів, стекова декорація, `decorates_tag`, глибша інтеграція з `#[Target]` | декоратори для цілої групи тегованих сервісів |
44 + | Validator | нові обмеження, підтримка Clock, reentrant-валідатори | валідація дат через Clock тестується без реального часу |
45 + | HttpClient | persistent cURL, Guzzle handler, власний DNS, SSRF allow-list, мок на окремий клієнт | швидші виклики суміжних сервісів, простіші тести інтеграцій |
46 + | RateLimiter | атрибут `#[RateLimit]`, режим вікна за календарем | обмеження частоти запитів прямо на контролері, без власного слухача |
47 + | HTTP-контролери | атрибут `#[Serialize]` для відповіді, розширений `#[Cache]`, файли й variadic у мапінгу payload, мапінг заголовків запиту | менше коду в контролерах API |
48 + | Нові компоненти | DeepCloner (глибоке клонування графів об'єктів), Tui (повноекранні термінальні інтерфейси) | DeepCloner — для знімків стану в тестах і кешах |
49 + | Профайлер | «Copy as cURL» для запиту, доступніший toolbar, розумніші `debug:*` | запит з профайлера легко відтворити в терміналі |
50 +
51 + ## Що обрати
52 +
53 + - **Новий проєкт** — 8.x. Оновлюйтеся кожні пів року: 8.1 → 8.2 → 8.3 → 8.4 LTS. Мінорні оновлення не ламають код, а 8.1 підтримується лише до січня 2027.
54 + - **Застосунок, який роками не оновлюватимуть** — 7.4 LTS: security-фікси до листопада 2029, але жодних нових можливостей.
55 + - **Перехід з 7.4** — спершу нуль deprecations на 7.4, потім одразу на актуальну 8.x, минаючи 8.0: її підтримка закінчилася в липні 2026.