Готовимся к переходу на Symfony 6.4 и Symfony 7.0

Источник: «Prepare Yourself for Symfony 6.4 and Symfony 7.0»
Symfony 6.4 и Symfony 7.0 будут выпущены одновременно в конце ноября 2023 года. В этой статье рассказывается об их различиях и о том, как выбрать оптимальную версию для своих проектов.

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 7.0 = Symfony 6.4 — устаревания. Обе версии имеют абсолютно одинаковые возможности, но в 6.4 включён код, связанный со всеми устареваниями 6.x, а в 7.0 такого кода нет.

Планирование обновления до версий 6.4 и 7.0

Symfony 7.0 не содержит устаревших функций, поэтому его нельзя использовать, если в вашем приложении до сих пор применяются какие-либо из этих устаревших функций. Поэтому при обновлении необходимо выполнить следующие шаги:

  1. Обновление проекта с текущей версии Symfony до Symfony 6.4
  2. Проверьте, какие устаревшие функции используются в вашем приложении
  3. Исправьте все устаревшие функции
  4. Теперь вы готовы к переходу на Symfony 7.0

Лучшим способом проверки устаревших функций, используемых в приложении, является запуск тестов с помощью тестового пакета Symfony и команды php bin/phpunit. В результатах вы увидите, что устаревшие функции разделены на две группы:

Если в вашем приложении нет тестов, и у вас нет времени на написание хороших тестов, подумайте о том, чтобы добавить smoke-тесты в ваше Symfony-приложение. Их можно написать очень быстро, и они помогут вам сообщать об устареваниях.

Усилия сообщества

Существуют тысячи пакетов Symfony, и ваше приложение, вероятно, будет использовать некоторые из них. Пакеты обычно нуждаются в некоторых обновлениях для подготовки к основным релизам Symfony. Подумайте о том, чтобы помочь волонтёрам, работающим над каждым пакетом, сообщая об устареваниях и помогая их устранить. Давайте сделаем всю экосистему Symfony готовой к выходу Symfony 7.0!

LTS и обычные версии

Помимо устареваний, важным отличием Symfony 6.4 от 7.0 является то, что 6.4 — это версия с долгосрочной поддержкой (LTS), а 7.0 — обычная версия:

Теоретически версия LTS выглядит лучше из-за расширенной поддержки. Однако на практике необходимо учитывать и следующее:

Официальная рекомендация Symfony — по возможности использовать обычные версии.

Дополнительные материалы

Предыдущая Статья

Выпущена бета-версия Livewire v3

Следующая Статья

Как использовать отношение One-to-Many в Laravel