Обновление младшей версии (например, с 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/*"

Дата обновления перевода 2025-02-24

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

Если вы получаете ошибку зависимости, это может означать, что вам также необходимо обновить другие библиотеки, которые являются зависимостями библиотек Symfony. Чтобы разрешить это, передайте флажок --with-all-dependencies:

1
$ composer update "symfony/*" --with-all-dependencies

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

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

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

Другая проблема, которая может возникнуть, заключается в том, что зависимости проекта могут
быть установлены на вашем локальном компьютере, но не на удаленном сервере. Обычно это происходит,
когда версии PHP на каждой машине разные. Решением является добавление опции конфигурации platform в файл `composer.json`, чтобы определить наивысшую версию PHP, допустимую для зависимостей (установите ее равной версии PHP на сервере).

Дата обновления перевода 2025-02-18

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

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

1
$ composer update

Warning

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

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

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

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

Tip

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

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

Дата обновления перевода 2025-02-24

3) Обновление рецептов

Со временем - и особенно при обновлении до новой версии библиотеки - может появиться обновленная
версия рецепта . Эти обновления обычно незначительны - например, новые комментарии в файле конфигурации - но желательно синхронизировать ваши файлы с рецептами.

Symfony Flex предоставляет несколько команд, которые помогут обновить ваши рецепты. Убедитесь, что вы зафиксировали все несвязанные изменения, над которыми вы работаете, перед началом работы:

1.18

Команда recipes:update была представлена в Symfony Flex 1.18.

1
2
3
4
5
6
7
8
9
10
11
# выбрать устаревший рецепт для обновления
$ composer recipes:update

# обновить конкретный рецепт
$ composer recipes:update symfony/framework-bundle

# увидеть список всех установленных рецептов и какие обновления доступны
$ composer recipes

# увидеть детализированную информацию про конкретные рецепты
$ composer recipes symfony/framework-bundle

Команда recipes:update умная: она смотрит на разницу между рецептом, когда вы его установили, и его последней версией. Затем она создает патч и применяет его к вашему приложению. Если возникнут какие-либо конфликты, вы можете разрешить их как обычный конфликт git и зафиксировать как обычно.