升级次要版本(例如,从 6.3.0 升级到 6.4.0)
如果您要升级次要版本(其中中间的数字发生变化),那么您应该不会遇到重大的向后兼容性更改。有关详细信息,请参阅 Symfony 向后兼容性承诺。
但是,一些向后兼容性中断是可能发生的,您将在稍后学习如何为它们做好准备。
升级次要版本有两个步骤
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 版本)。
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
冲突一样解决它们,并像往常一样提交。