Обновление младшей версии (например, с 6.3.0 до 6.4.0)

Дата обновления перевода 2024-07-29

Обновление младшей версии (например, с 6.3.0 до 6.4.0)

Если вы обновляете младшую версию (где изменяется цифра посредине), то вы не должны столкнуться с существенными изменениями обратной совместимости. Чтобы узнать детали, смотрите обещание обратной совместримоти Symfony.

Однако, некоторые поломки обратной совместимости возможны и через секунду вы узнаете, как подготовиться к ним.

В обновлении младшей верси есть два шага:

  1. Обновление библиотеки Symfony через Composer ;
  2. Обновление вашего кода для работы с новой версией .

1) Обновление библиотеки Symfony через Composer

Файл composer.json сконфигурирован так, чтобы позволить пакетам Symfony обновляться до версий патчей. Но чтобы обновить пакет до новой младшей версии, вам вероятно потребуется обновить ограничение версии рядом с каждой библиотекой, начинающейся с symfony/. Предположим, что вы переходите с Symfony 6.3 на 6.4:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
      "...": "...",

      "require": {
-         "symfony/config": "6.3.*",
+         "symfony/config": "6.4.*",
-         "symfony/console": "6.3.*",
+         "symfony/console": "6.4.*",
          "...": "...",

          "...": "Несколько библиотек, начинающихся с
                  symfony/, следуют своей собственной схеме версионирования. Вам
                  не нужно обновлять эти версии: вы можете
                  обновить их независимо, когда захотите",
          "symfony/monolog-bundle": "^3.5",
      },
      "...": "...",
  }

Ваш файл composer.json должен также содержать блок extra, который вам нужно будет также обновить:

1
2
3
4
5
6
7
"extra": {
      "symfony": {
          "...": "...",
-         "require": "6.3.*"
+         "require": "6.4.*"
      }
  }

Далее, используйте Composer для скачивание новых версий библиотек:

1
$ composer update "symfony/*"

Ошибки зависимостей

Если вы получите ошибку зависимости, она может просто означать, что вам нужно обновить и другие ваши зависимости. В этом случае, попробуйте следующую команду:

1
$ composer update symfony/symfony --with-dependencies

Это обновляет symfony/symfony и все пакеты, от которых он завсит, которые будут включать всебя несколько других пакетов. Используя облегчённую версию ограничений в composer.json, вы можете контролировать, до каких версий будет обновлена каждая из ваших библиотек.

Если и это не сработает, ваш файл composer.json может указывать версию для билиотеки, котора не совместима с более новыми версиями Symfony. В таком случае, обновление библиотеки до более новой версии в composer.json может решить проблему.

Или, у вас могут быть более глубокие проблемы, когда разные библиотеки зависят от конфликтующих версий других библиотек. Проверьте ваши сообщения ошибок для отладки.

Обновление других пакетов

Вы можете также захотеть обновить и остальные ваши библиотеки. Если вы хорошо справились с вашими version constraints в composer.json, вы можете без опаски сделать это, выполнив:

1
$ composer update

Caution

Будьте осторожны, если у вас есь какие-то общие ограничения версий в вашем composer.json (например, dev-master), это может обновить некоторые библиотеки не из Symfony до более новых версий, которые содержат существенные изменения обратной совместимости.

2) Обновление вашего кода для работы с новой версией

В теории, вы должны уже закончить! Однако, вам может понадобиться сделать несколько изменений в вашем коде, чтобы всё заработало. В дополнение, некоторые функции, которые вы используете, могут работать, но теперь могут осуждаться. И хотя это нормально, если вы будете знать об этих осуждениях, вы можете начать исправлять их со временем.

Каждая версия Symfony поставляется с файлом обновленя (UPGRADE) (например, UPGRADE-6.4.md), включённым в каталог Symfony, который обоъясняет эти изменения. Если вы будете следоваь инструкциям в документа и соответственно обновите ваш код, в будущем обновления должны стать безопасными.

Tip

Rector - это сторонний проект, который автоматизирует обновление и рефакторинг проектов PHP. Rector включает в себя некоторые правила для исправления определенных устареваний Symfony автоматически.

Эти документы также можно найти в Хранилище Symfony.

3) Updating Recipes

Over time - and especially when you upgrade to a new version of a library - an updated version of the recipe may be available. These updates are usually minor - e.g. new comments in a configuration file - but it's a good idea to keep your files in sync with the recipes.

Symfony Flex provides several commands to help upgrade your recipes. Be sure to commit any unrelated changes you're working on before starting:

1.18

The recipes:update command was introduced in Symfony Flex 1.18.

1
2
3
4
5
6
7
8
9
10
11
# choose an outdated recipe to update
$ composer recipes:update

# update a specific recipe
$ composer recipes:update symfony/framework-bundle

# see a list of all installed recipes and which have updates available
$ composer recipes

# see detailed information about a specific recipes
$ composer recipes symfony/framework-bundle

The recipes:update command is smart: it looks at the difference between the recipe when you installed it and the latest version. It then creates a patch and applies it to your app. If there are any conflicts, you can resolve them like a normal git conflict and commit like normal.