将 symfony 2.8 更新到 3.* ,奏鸣曲错误

Posted

技术标签:

【中文标题】将 symfony 2.8 更新到 3.* ,奏鸣曲错误【英文标题】:update symfony 2.8 to 3.* , sonata errors 【发布时间】:2018-07-09 12:19:57 【问题描述】:

我想更新我的 symfony 项目(当前 2.8 到 sf 3.*)

这是我的 composer.json 文件(需要的部分)

"require": 
    "php": ">=5.3.9",
    "symfony/symfony": "2.8.*",
    "doctrine/orm": "^2.4.8",
    "doctrine/doctrine-bundle": "~1.4",
    "symfony/assetic-bundle": "~2.3",
    "symfony/swiftmailer-bundle": "~2.3",
    "symfony/monolog-bundle": "~2.4",
    "sensio/distribution-bundle": "~4.0",
    "sensio/framework-extra-bundle": "^3.0.2",
    "incenteev/composer-parameter-handler": "~2.0",

    "sonata-project/media-bundle": "^2.3",
    "sonata-project/user-bundle": "^2.2",
    "sonata-project/formatter-bundle": "~2.3",
    "sonata-project/doctrine-orm-admin-bundle": "~2.2",
    "sonata-project/admin-bundle": "~2.2",
    "sonata-project/timeline-bundle": "^2.2",
    "sonata-project/intl-bundle": "^2.2",
    "sonata-project/cache-bundle": "^2.2",

    "liuggio/excelbundle": "^2.0",

    "friendsofsymfony/elastica-bundle": "^3.1",

    "liip/imagine-bundle": "^1.4",
    "friendsofsymfony/jsrouting-bundle": "^1.6",
    "gos/web-socket-bundle": "^1.8"
,

如果我改变了

"symfony/symfony": "2.8.*",

"symfony/symfony": "~3.0",

然后做

php composer.phar update symfony/symfony --with-dependencies

但我有这个错误

Problem 1
- sonata-project/media-bundle 2.3.4 requires symfony/symfony ~2.3 -> satisfiable by symfony/symfony

所以我尝试将媒体包更新到 3.10.1,但它在另一个奏鸣曲包中给了我一个错误..

我应该如何做正确的事情? 我必须一个一个地更新模块吗? 或者用所有修改更新我的 composer.json ?

谢谢

【问题讨论】:

开始一个新的项目,并一一要求你的依赖。可能不会花很长时间,你应该最终得到一个工作的 composer.json 文件。或者您会发现某些捆绑软件根本不支持 S3.x。 【参考方案1】:

你的奏鸣曲依赖太旧了,不支持 Symfony 3。

示例:https://github.com/sonata-project/SonataMediaBundle/blob/2.x/composer.json

您必须升级您的依赖项才能使其正常工作。

另外,您可以使用composer why-not 命令获得更多帮助。

【讨论】:

“升级你的依赖让它工作”这是我的问题:(我不知道从哪里开始,我应该一个包一个包吗?【参考方案2】:

我也有几次陷入这个错误。错误信息有点抽象。

要解决此错误,您需要在 composer.json 文件中更新 sonata-project/media-bundle 的版本。 所以你可以将其替换为:"sonata-project/media-bundle": "^3.1",

然后再次运行composer update 命令。您可能会遇到与上面相同的错误,但对于另一个包。也更新一下。重复此操作,直到您的 composer update 命令成功。

到那时,如果您幸运的话,您的应用程序将会运行。如果不是,您需要更新代码以使用新的包版本代码。请记住,更新包的第一个数字(从 2.8 到 3.something)意味着这是一个breaking compatibility 更新。

稍后更新:如果您在此处查看sonata-project/media-bundle 2.3 版的composer.json 文件:https://github.com/sonata-project/SonataMediaBundle/blob/2.3.0/composer.json,您将看到它需要symfony 版本:"symfony/symfony": "~2.3",并且您想更新到symfony 3.something 版本。所以它们是不相容的。这就是为什么你还需要更新这个包等等。 Composer 将在后台执行此操作,并在您的包或其依赖项之间不兼容时抛出该错误。

希望对您有所帮助。

【讨论】:

以上是关于将 symfony 2.8 更新到 3.* ,奏鸣曲错误的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 更新 2.8 到 3.4

无法使用 symfony 5 安装奏鸣曲管理员

Symfony 3 和奏鸣曲管理员

Symfony 4 中的奏鸣曲媒体包模板

Symfony 3.2.7 和奏鸣曲媒体包安装

Symfony LTS:如何从 2.8 升级到 3.4?