feat(seo): og:image size for front matter images; short titles and explicit descriptions for From Magento to Symfony
uk/articles/magento-to-symfony/practice/versions.md
+2
−1
Чим відрізняються 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.