跳到内容

升级次要版本(例如,从 6.3.0 升级到 6.4.0)

编辑此页

如果您要升级次要版本(其中中间的数字发生变化),那么您应该不会遇到重大的向后兼容性更改。有关详细信息,请参阅 Symfony 向后兼容性承诺

但是,一些向后兼容性中断可能发生的,您将在稍后学习如何为它们做好准备。

升级次要版本有两个步骤

  1. 通过 Composer 更新 Symfony 库;
  2. 更新您的代码以使用新版本.

1) 通过 Composer 更新 Symfony 库

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.*",
          "...": "...",

          "...": "A few libraries starting with
                  symfony/ follow their own versioning scheme. You
                  do not need to update these versions: you can
                  upgrade them independently whenever you want",
          "symfony/monolog-bundle": "^3.10",
      },
      "...": "...",
  }

您的 composer.json 文件也应该有一个 extra 块,您也需要更新它

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

接下来,使用 Composer 下载新版本的库

1
$ composer update "symfony/*"

依赖错误

如果您收到依赖错误,则可能意味着您还需要升级作为 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 版本)。

升级其他软件包

您可能还想升级其余的库。如果您在 版本约束 中做得很好 composer.json,您可以通过运行以下命令安全地执行此操作

1
$ composer update

警告

请注意,如果您的 composer.json 中有一些不明确的 版本约束 (例如 dev-master),这可能会将一些非 Symfony 库升级到包含向后兼容性中断更改的新版本。

2) 更新您的代码以使用新版本

理论上,您应该完成了!但是,您可能需要对您的代码进行一些更改才能使一切正常运行。此外,您正在使用的一些功能可能仍然有效,但现在可能已被弃用。虽然这很好,但如果您知道这些弃用,您可以开始随着时间的推移修复它们。

每个 Symfony 版本都带有一个 UPGRADE 文件(例如 UPGRADE-6.4.md),该文件包含在 Symfony 目录中,描述了这些更改。如果您按照文档中的说明进行操作并相应地更新您的代码,那么将来更新应该是安全的。

提示

Rector 是一个第三方项目,可以自动执行 PHP 项目的升级和重构。 Rector 包含一些规则,可以自动修复某些 Symfony 弃用。

这些文档也可以在 Symfony 仓库中找到。

3) 更新 Recipes

随着时间的推移 - 尤其是在您升级到新版本的库时 - 更新版本的 recipe 可能会可用。这些更新通常是次要的 - 例如,配置文件中的新注释 - 但最好使您的文件与 recipes 保持同步。

Symfony Flex 提供了几个命令来帮助升级您的 recipes。在开始之前,请务必提交您正在处理的任何不相关的更改

1.18

recipes:update 命令是在 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

recipes:update 命令非常智能:它会查看您安装 recipe 时和最新版本之间的差异。然后,它会创建一个补丁并将其应用于您的应用程序。如果存在任何冲突,您可以像普通的 git 冲突一样解决它们,并像往常一样提交。

这项工作,包括代码示例,根据 Creative Commons BY-SA 3.0 许可获得许可。
目录
    版本