Оновлення молодшої версії (наприклад, з 5.0.0 до 5.1.0)

Дата оновлення перекладу 2024-06-07

Оновлення молодшої версії (наприклад, з 5.0.0 до 5.1.0)

Якщо ви оновлюєте молодшу версію (де змінюється цифра посередині), то ви не повинні зіштовхнутися з суттєвими змінами зворотної сумісності. Щоб дізнатися деталі, дивіться обіцянку зворотної сумісності Symfony.

Однак, деякі поломки зворотної сумісності можливі, і за секунду ви дізнаєтеся, як підготуватися до них.

В оновленні молодшої версії є два кроки:

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

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

Файл composer.json сконфігуровано так, щоб дозволяти пакетам Symfony оновлюватися, щоб оновлювати патчі. Але для того, щоб оновити молодшу версію, вам скоріш за все буде потрібно оновити обмеження версії поруч з кожною бібліотекою, що розпочинається з symfony/. Уявіть, що ви оновлюєтеся з 5.3 до 5.4:

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

      "require": {
-         "symfony/cache": "5.3.*",
+         "symfony/cache": "5.4.*",
-         "symfony/config": "5.3.*",
+         "symfony/config": "5.4.*",
-         "symfony/console": "5.3.*",
+         "symfony/console": "5.4.*",
          "...": "...",

          "...": "Декілька бібліотек, що розпочинаються з
                  symfony/ дотримуються власної схеми версіонування. Вам
                  не потрібно оновлювати ці версії: ви можете оновити їх
                  незалежно коли вам захочеться",
          "symfony/monolog-bundle": "^3.5",
      },
      "...": "...",
  }

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

1
2
3
4
5
6
7
"extra": {
      "symfony": {
          "...": "...",
-         "require": "5.3.*"
+         "require": "5.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-5.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.