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.