Готовимся к переходу на Symfony 6.4 и Symfony 7.0
Symfony 6.4 и Symfony 7.0 будут выпущены одновременно в конце ноября 2023 года. Обе версии будут обладать абсолютно одинаковым набором функций, но будут и некоторые важные отличия. Продолжайте читать, чтобы узнать, как подготовить свои проекты к обновлению до новых версий Symfony.
Мажорная и минорная версии Symfony
Symfony выпускает минорные версии (6.0, 6.1, 6.2 и т.д.) каждые полгода - в конце мая и в конце ноября. Минорные версии содержат множество новых возможностей, но после их выпуска новые возможности не добавляются.
Например, Symfony 6.3 был выпущен в мае 2023 года с большим количеством новых возможностей. Следующие версии патчей (которые выпускаются ежемесячно) будут содержать только исправления ошибок: 6.3.1 содержит те же возможности, что и 6.3.0, и некоторые исправления; 6.3.2 содержит те же возможности, что и 6.3.0 и 6.3.1, и ещё больше исправлений; и т.д.
Устаревания в Symfony
Помимо новых функций и исправления ошибок, в программные проекты вносятся такие изменения, как переименование опции конфигурации, добавление или удаление аргумента метода и т.д. Если Symfony внесёт подобные изменения и выпустит новую версию, то ваши приложения просто перестанут работать после обновления.
Вместо этого Symfony использует другой подход, основанный на использовании устаревшего поведения. При внесении изменений Symfony сохраняет старое поведение (помечая его, как устаревшее) и добавляет поддержку нового поведения. Это заставляет Symfony генерировать сообщение в журнале всякий раз, когда ваше приложение использует устаревшую функцию.
Определённые устаревания приводят к небольшому снижению производительности. Если бы Symfony постоянно добавляла исправления, то в какой-то момент эта деградация стала бы очень заметной. Именно поэтому мы удаляем все исправления каждые два года с выходом новой мажорной версии. На практике:
- Symfony 6.0 (ноябрь 2021 г.): не имеет устареваний
- Symfony 6.1 (май 2022 г.): имеет некоторые устаревания
- Symfony 6.2 (ноябрь 2022 г.): имеет устаревания версии 6.1 + новые устаревания
- Symfony 6.3 (май 2023 г.): имеет устаревание в версиях 6.1 и 6.2 + новые устаревания
- Symfony 6.4 (ноябрь 2023 г.): имеет устаревания 6.1, 6.2 и 6.3 + новые устаревания
- Symfony 7.0 (ноябрь 2023 г.): не содержит устареваний
Symfony 7.0 = Symfony 6.4 — устаревания. Обе версии имеют абсолютно одинаковые возможности, но в 6.4 включён код, связанный со всеми устареваниями 6.x, а в 7.0 такого кода нет.
Планирование обновления до версий 6.4 и 7.0
Symfony 7.0 не содержит устаревших функций, поэтому его нельзя использовать, если в вашем приложении до сих пор применяются какие-либо из этих устаревших функций. Поэтому при обновлении необходимо выполнить следующие шаги:
- Обновление проекта с текущей версии Symfony до Symfony 6.4
- Проверьте, какие устаревшие функции используются в вашем приложении
- Исправьте все устаревшие функции
- Теперь вы готовы к переходу на Symfony 7.0
Лучшим способом проверки устаревших функций, используемых в приложении, является запуск тестов с помощью тестового пакета Symfony и команды php bin/phpunit
. В результатах вы увидите, что устаревшие функции разделены на две группы:
- Direct Непосредственные устаревания: это те устаревания, которые вы можете исправить самостоятельно; они вызваны вашим собственным кодом приложения;
- Inderect Косвенные устаревания: их невозможно исправить быстро; они вызваны пакетами, пакетами и библиотеками в
vendor/
, которые используют устаревшие функции; пожалуйста, сообщайте об этих устареваниях в репозитории каждого проекта, чтобы они могли их исправить.
Если в вашем приложении нет тестов, и у вас нет времени на написание хороших тестов, подумайте о том, чтобы добавить smoke-тесты в ваше Symfony-приложение. Их можно написать очень быстро, и они помогут вам сообщать об устареваниях.
Усилия сообщества
Существуют тысячи пакетов Symfony, и ваше приложение, вероятно, будет использовать некоторые из них. Пакеты обычно нуждаются в некоторых обновлениях для подготовки к основным релизам Symfony. Подумайте о том, чтобы помочь волонтёрам, работающим над каждым пакетом, сообщая об устареваниях и помогая их устранить. Давайте сделаем всю экосистему Symfony готовой к выходу Symfony 7.0!
LTS и обычные версии
Помимо устареваний, важным отличием Symfony 6.4 от 7.0 является то, что 6.4 — это версия с долгосрочной поддержкой (LTS), а 7.0 — обычная версия:
- LTS: исправление ошибок в течение 3 лет и исправление ошибок безопасности в течение 4 лет;
- Обычная: исправление ошибок в течение 8 месяцев и исправление ошибок безопасности также в течение 8 месяцев.
Теоретически версия LTS выглядит лучше из-за расширенной поддержки. Однако на практике необходимо учитывать и следующее:
- Если вы решили остаться на Symfony 6.4 LTS: вы будете получать исправления ошибок до ноября 2026 года и исправления безопасности до ноября 2027 года; однако вы не получите никаких новых возможностей Symfony в течение двух лет, до перехода на следующую версию LTS (7.4) в ноябре 2025 года.
- Если вы решите перейти на Symfony 7.0: вы будете получать исправления ошибок/безопасности только до июля 2024 года, но сможете без особых усилий перейти на версии 7.1 (май 2024 года), 7.2 (ноябрь 2024 года), 7.3 (май 2025 года) и 7.4 (ноябрь 2025 года), что позволит вам получить все новые возможности Symfony и постоянную поддержку ошибок/безопасности. Кроме того, при переходе от одной минорной версии к другой можно регулярно исправлять недоработки, вместо того чтобы исправлять все недоработки сразу при переходе к следующей мажорной версии.
Официальная рекомендация Symfony — по возможности использовать обычные версии.