您如何建议从Symfony从2.1升级到4.0

时间:2018-11-12 20:14:16

标签: symfony

我有一个基于Symfony 2.1的项目,需要升级到4.0 你知道最好的方法吗? 我可以直接从2.1升级到4.0吗?或者最好先从2.1迁移到3.0,然后再迁移4.0 ... 你知道什么是最好的方法吗? 非常感谢!

3 个答案:

答案 0 :(得分:4)

您不应该直接升级。而是先升级到2.8,然后使用deprecation-detector之类的工具修复所有弃用的内容。您可能希望以较小的步骤执行此操作。那时有相当多的弃用,甚至有一些BC中断,尤其是在表单组件周围,并且在版本之间读取changelogs对于跟踪这些更改很重要。听起来似乎不多,但这已经是一项非常繁琐的任务,但这是值得的。

一旦移至2.8,就可以切换到Symfony 3.4,再次修复所有不推荐使用的内容。有一个与安全相关的BC破坏,很容易修复。除了从2.8升级到3.4之外,升级应该比升级到2.8更容易。

从3.3版本开始,您可以使用persisted deprecation log来修复次要发行版中引入的所有弃用。当您达到3.4时,您可以暂时使用。这是一个长期的支持版本,因此直到明年您才需要进行重大更新。

4.0不会收到错误修复,并且安全修复仅在2019年1月之前可用,因此,如果您要切换到下一个主要版本,建议您使用4.2,然后定期进行更新(每6个月发布一个新的次要版本)出来)。如果这听起来太麻烦了,我建议您继续使用3.4一段时间,然后使用与上述相同的步骤升级到下一个LTS版本。

尤其是在将Symfony 3.4升级到4.x时,您还可以查看一个名为rector的工具,它可以为您自动进行升级。据我所知,它不支持所有已发生的更改,但至少可以通过为您自动化它们来简化某些弃用更改。

edit:还请记住,升级时还必须升级使用的捆绑软件,其中一些捆绑软件甚至可能不支持3.x或4.x。通过手动更改配置或替换它们来解决这些问题可能是最烦人的工作。使用composer whycomposer why-not来找出作曲家为什么不升级某些软件包甚至Symfony本身的原因将非常有用。

答案 1 :(得分:0)

感谢您的回复。我将尝试先开始升级到2.8.0,但是composer.json中存在很多版本冲突,目前我有以下冲突:

“需要”:{         “ php”:“> = 5.3.3”,         “ symfony / symfony”:“ 2.1。”,         “ doctrine / orm”:“> = 2.2.3,<2.4-dev”,         “ doctrine / doctrine-bundle”:“ 1.0。”,         “ twig / extensions”:“ 1.0。 @dev”,         “ symfony / assetic-bundle”:“ 2.1。”,         “ symfony / swiftmailer-bundle”:“ 2.1。”,         “ symfony / monolog-bundle”:“ 2.1。”,         “ sensio / distribution-bundle”:“ 2.1。”,         “ sensio / framework-extra-bundle”:“ 2.1。”,         “ sensio / generator-bundle”:“ 2.1。”,         “ jms / security-extra-bundle”:“ 1.2。”,         “ jms / di-extra-bundle”:“ 1.1。”,         “ kriswallsmith / assetic”:“ 1.1。 @dev”,         “ hearsay / require-js-bundle”:“ *”,         “ symfony / options-resolver”:“ 2.6”,         “ wsdl2phpgenerator / wsdl2phpgenerator”:“ 3.3”     },     “脚本”:{         “ post-install-cmd”:[             “ Sensio \ Bundle \ DistributionBundle \ Composer \ ScriptHandler :: buildBootstrap”,             “ Sensio \ Bundle \ DistributionBundle \ Composer \ ScriptHandler :: clearCache”,             “ Sensio \ Bundle \ DistributionBundle \ Composer \ ScriptHandler :: installAssets”,             “ Sensio \捆绑\ DistributionBundle \ Composer \ ScriptHandler :: installRequirementsFile”         ],         “ post-update-cmd”:[             “ Sensio \ Bundle \ DistributionBundle \ Composer \ ScriptHandler :: buildBootstrap”,             “ Sensio \ Bundle \ DistributionBundle \ Composer \ ScriptHandler :: clearCache”,             “ Sensio \ Bundle \ DistributionBundle \ Composer \ ScriptHandler :: installAssets”,             “ Sensio \捆绑\ DistributionBundle \ Composer \ ScriptHandler :: installRequirementsFile”         ]     },     “额外”:{         “ symfony-app-dir”:“ app”,         “ symfony-web-dir”:“网络”     }

您知道是否有一种方法可以知道我必须在require节之后输入哪个版本?谢谢!

答案 2 :(得分:0)

抱歉,再次发送composer.json代码:

{
"name": "symfony/framework-standard-edition",
"description": "The \"Symfony Standard Edition\" distribution",
"autoload": {
    "psr-0": { "": "src/" }
},
"require": {
    "php": ">=5.3.3",
    "symfony/symfony": "2.1.*",
    "doctrine/orm": ">=2.2.3,<2.4-dev",
    "doctrine/doctrine-bundle": "1.0.*",
    "twig/extensions": "1.0.*@dev",
    "symfony/assetic-bundle": "2.1.*",
    "symfony/swiftmailer-bundle": "2.1.*",
    "symfony/monolog-bundle": "2.1.*",
    "sensio/distribution-bundle": "2.1.*",
    "sensio/framework-extra-bundle": "2.1.*",
    "sensio/generator-bundle": "2.1.*",
    "jms/security-extra-bundle": "1.2.*",
    "jms/di-extra-bundle": "1.1.*",
    "kriswallsmith/assetic": "1.1.*@dev",
    "hearsay/require-js-bundle":"*",
    "symfony/options-resolver": "2.6",
    "wsdl2phpgenerator/wsdl2phpgenerator": "3.3"
},
"scripts": {
    "post-install-cmd": [
        "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
        "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
        "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
        "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile"
    ],
    "post-update-cmd": [
        "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
        "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
        "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
        "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile"
    ]
},
"extra": {
    "symfony-app-dir": "app",
    "symfony-web-dir": "web"
}

}