我有一个基于Symfony 2.1的项目,需要升级到4.0 你知道最好的方法吗? 我可以直接从2.1升级到4.0吗?或者最好先从2.1迁移到3.0,然后再迁移4.0 ... 你知道什么是最好的方法吗? 非常感谢!
答案 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 why
和composer 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"
}
}