symfony - Symfony LTS:如何从 2.8 升级到 3.4?
问题描述
Symfony 2.8 是该2.x
分支的最后一个版本,也是之前的 LTS。
Symfony 3.4 是该3.x
分支和当前 LTS 的最后一个版本。
2.8
要将 Symfony 从升级到3.4
最后一个 LTS 并切换到最后一个 LTS,需要哪些步骤?
解决方案
准备升级
检查中列出的所有依赖项和捆绑包composer.json
是否已发布与 Symfony 3.4 兼容的版本,您可以通过在 Packagist 上搜索每个包来做到这一点,例如EasyAdmin与 Symfony 3 兼容,因为其中的依赖项requires
不限于 Symfony 2(我们会看到类似symfony/*: ~2.3
)。如果其中一个依赖项与 Symfony 3 不兼容,您将不得不寻找替换包或修补这些库。
作曲家.json
为了将您的应用程序从 Symfony 升级2.8
到 Symfony,3.4
您必须通过更改composer.json文件来更新依赖项:
([…]
表示代码不变)
旧(2.8)版本:
{
[…]
"autoload-dev": {
"files": [ "vendor/symfony/symfony/src/Symfony/Component/VarDumper/Resources/functions/dump.php" ]
},
"require": {
"php": ">=5.3.9",
"doctrine/doctrine-bundle": "~1.4",
"doctrine/orm": "^2.4.8",
"incenteev/composer-parameter-handler": "~2.0",
"sensio/distribution-bundle": "~4.0",
"sensio/framework-extra-bundle": "^3.0.2",
"symfony/monolog-bundle": "^3.0.2",
"symfony/swiftmailer-bundle": "~2.3,>=2.3.10",
"symfony/symfony": "2.8.*",
"twig/twig": "^1.0||^2.0"
},
"require-dev": {
"sensio/generator-bundle": "~3.0",
"symfony/phpunit-bridge": "~2.7"
},
"config": {
"bin-dir": "bin",
"platform": {
"php": "5.6"
},
"sort-packages": true
},
"extra": {
"symfony-app-dir": "app",
"symfony-web-dir": "web",
"symfony-assets-install": "relative",
[…]
"branch-alias": {
"dev-master": "2.8-dev"
}
}
}
新(3.4)版本:
{
[…]
"autoload-dev": {
"psr-4": { "Tests\\": "tests/" },
"files": [ "vendor/symfony/symfony/src/Symfony/Component/VarDumper/Resources/functions/dump.php" ]
},
"require": {
"php": ">=5.5.9",
"doctrine/doctrine-bundle": "^1.6",
"doctrine/orm": "^2.5",
"incenteev/composer-parameter-handler": "^2.0",
"sensio/distribution-bundle": "^5.0.19",
"sensio/framework-extra-bundle": "^5.0.0",
"symfony/monolog-bundle": "^3.1.0",
"symfony/polyfill-apcu": "^1.0",
"symfony/swiftmailer-bundle": "^2.6.4",
"symfony/symfony": "3.4.*",
"twig/twig": "^1.0||^2.0"
},
"require-dev": {
"sensio/generator-bundle": "^3.0",
"symfony/phpunit-bridge": "^3.0"
},
"config": {
"platform": {
"php": "5.6"
},
"sort-packages": true
},
"extra": {
"symfony-app-dir": "app",
"symfony-bin-dir": "bin",
"symfony-var-dir": "var",
"symfony-web-dir": "web",
"symfony-tests-dir": "tests",
"symfony-assets-install": "relative",
[…]
"branch-alias": {
"dev-master": "3.4-dev"
}
}
}
概括
autoload-dev.psr-4
已添加(必须使用测试目录的路径进行更改)- Symfony 和依赖项已更新
symfony/polyfill-apcu
是一个新的依赖extra
已更新以使用新的目录结构:var
用于临时文件等。config.bin-dir
已被删除
有关升级的更多详细信息:→ 3.0,→ 3.1,→ 3.2,→ 3.3,→ 3.4
应用程序/AppKernel.php
添加getRootDir
和更新registerContainerConfiguration
功能:
public function getRootDir()
{
return __DIR__;
}
public function registerContainerConfiguration(LoaderInterface $loader)
{
$loader->load($this->getRootDir().'/config/config_'.$this->getEnvironment().'.yml');
}
缓存和日志
如果要放入cache
and logs
,则必须通过添加以下行var/
来更新文件:app/AppKernel.php
public function getCacheDir()
{
return dirname(__DIR__).'/var/cache/'.$this->getEnvironment();
}
public function getLogDir()
{
return dirname(__DIR__).'/var/logs';
}
然后创建var/
目录并放一个空文件.gitkeep
并将这些更改应用于您的.gitignore
文件:
/var/cache/*
/var/logs/*
!var/cache/.gitkeep
!var/logs/.gitkeep
最后的步骤
更新composer.json文件后,您必须更新依赖项:
composer update
然后你可能需要刷新缓存:
php app/console cache:clear --env=dev
注意:我使用以下命令来获取composer.json文件:
# create Symfony "2.8.*" project in the "2.8" directory
composer create-project symfony/framework-standard-edition "2.8" "2.8.*" --no-interaction -v
# create Symfony "3.4.*" project in the "3.4" directory
composer create-project symfony/framework-standard-edition "3.4" "3.4.*" --no-interaction -v
# compare the Symfony 2.8 and 3.4 composer.json files
diff -u 2.8/composer.json 3.4/composer.json
差异也可以在GitHub 上找到。
奖励:启用服务的自动装配。
推荐阅读
- python - 从 txt 打开保存数据,其中 dict 和更新并再次保存
- python - AttributeError:“Python”对象没有属性“控制”
- flutter - 类参数设置中的多if语句
- c# - 如果下载完成,则从 form1 关闭 form5
- python - 向所有视图添加参数,而无需全部编辑它们以在 Django 中包含变量
- javascript - AWS Lambda 和 SQS 触发器
- javascript - 通过 Node.js 获取 .NET 版本
- python - Tesseract-OCR 无法识别单个图像中的多个字符
- java - tomcat -> nginx 在流式传输大量数据时写入错误
- profiling - 是否有一种简单的方法可以在运行时检测是否启用了 JRuby 分析?