升级主要Symfony版本的第三方Bundle欧宝娱乐app下载地址
编辑本页警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 2.7,现已不再维护。
读本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。
升级主要Symfony版本的第三方Bundle欧宝娱乐app下载地址
欧宝娱乐app下载地址Symfony 3于2015年11月发布。尽管这个版本不包含任何新特性,但它删除了之前2.8版本中包含的所有向后兼容层。如果您的包使用了任何已弃用的特性,并且它作为第三方包发布,那么升级到Symfony 3的应用程序将不再能够使用它。欧宝娱乐app下载地址
允许安装Symfony 3组件欧宝娱乐app下载地址
类定义了它们的Symfony依赖关系欧宝娱乐app下载地址~ 2。N
或^ 2。N
限制条件composer.json
文件。例如:
1 2 3 4 5 6 7
{“需要”: {“欧宝娱乐app下载地址symfony / framework-bundle”:“~ 2.7”,“欧宝娱乐app下载地址symfony /仪”:“~ 2.7”,“欧宝娱乐app下载地址symfony /验证器”:“~ 2.7”}}
这些约束阻止bundle使用Symfony 3组件,因此不可能在基于Symfony 3的应用程序欧宝娱乐app下载地址中安装它。由于Composer依赖约束的灵活性,这个问题非常容易解决。只是替换~ 2。N
通过3.0 ~ 2. n | ~
(或^ 2。N
通过^ 2. n | ~ 3.0
).
上面的例子可以更新到Symfony 3,如下所示:欧宝娱乐app下载地址
1 2 3 4 5 6 7
{“需要”: {“欧宝娱乐app下载地址symfony / framework-bundle”:“3.0 ~ 2.7 | ~”,“欧宝娱乐app下载地址symfony /仪”:“3.0 ~ 2.7 | ~”,“欧宝娱乐app下载地址symfony /验证器”:“3.0 ~ 2.7 | ~”}}
提示
第三方捆绑包上另一个常见的版本约束是> = 2。N
.您应该避免使用该约束,因为它太通用了(这意味着您的包与任何未来的Symfony版本兼容)。欧宝娱乐app下载地址而不是使用3.0 ~ 2. n | ~
或^ 2. n | ~ 3.0
让您的捆绑包面向未来。
寻找弃用并修复它们
除了允许用户在Symfony 3中使用您的包外,您的包必须停止使用2.8版本中弃用的任何特性,欧宝娱乐app下载地址因为这些特性在3.0中被删除了(您将得到异常或PHP错误)。检测已弃用的最简单方法是安装欧宝娱乐app下载地址symfony / phpunit-bridge包然后运行测试套件。
首先,将组件安装为dev
你的bundle的依赖关系:
1
$创建symfony/phpunit-bridg欧宝娱乐app下载地址e
然后,运行你的测试套件,寻找PHPUnit测试报告后显示的弃用列表:
12 3 4 5 6 7 8 9 10 11 12 13
$phpunit)#……PHPUnit)输出剩余的弃用通知(3)“模式”选项在文件…自2.2版以来已弃用,并将被删除在3.0.使用“路径”选项在相反,路由定义…理解函数“form_enctype”弃用。使用“form_start”而不是在...Symf欧宝娱乐app下载地址ony\Component\Security\Core\SecurityContext类自2.6版起已弃用,并将被移除在3.0.使用……
修复报告的弃用,再次运行测试套件并重复此过程,直到没有报告弃用使用。
有用的资源
这里有一些资源可以帮助你检测、理解和修复已弃用功能的使用:
- Symfony官方欧宝娱乐app下载地址升级指南2。X到3.0
- 升级到Symfony 3.0所需更改的完整列表,并按组件分组。欧宝娱乐app下载地址
- SensioLabs DeprecationDetector
- 它对项目的源代码运行静态代码分析,以发现废弃方法、类和接口的用法。它适用于任何PHP应用程序,但它包含针对Symfony应用程序的特殊检测器,在这些检测器中,它还可以检测废弃服务的使用情况。欧宝娱乐app下载地址
- 欧宝娱乐app下载地址Symfony升级修复器
- 它通过分析Symfony欧宝娱乐app下载地址项目来发现弃用。此外,由于支持的“修复器”列表不断增加,它自动解决了其中一些问题。
在Symfony 3中测试你的Bundle欧宝娱乐app下载地址
现在您的包已经删除了所有弃用项,是时候在Symfony 3应用程序中测试它了。欧宝娱乐app下载地址假设您已经有一个Symfony 3应用程序,您可以在本地测试更新后欧宝娱乐app下载地址的包,而不必通过Composer安装它。
如果您的操作系统支持符号链接,只需将适当的供应商目录指向您的本地bundle根目录:
1
$Ln -s /path/to/your/当地的/包/供应商/ you-vendor-name / your-bundle-name
如果您的操作系统不支持符号链接,则需要将本地bundle目录复制到相应的目录中供应商/
.
更新Travis CI配置
除了在本地运行工具外,建议设置Travis CI服务,使用不同的Symfony配置运行您的包的测试。欧宝娱乐app下载地址使用以下推荐的配置作为您自己配置的起点:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
语言:phpsudo:假php:-5.3-5.6-7.0矩阵:包括:-php:5.3.3env:COMPOSER_FLAGS = '——prefer-lowest——prefer-stable”欧宝娱乐app下载地址SYMFONY_DEPRECATIONS_HELPER =弱-php:5.6env:欧宝娱乐app下载地址SYMFONY_VERSION = ' 2.7 . * '-php:5.6env:欧宝娱乐app下载地址SYMFONY_VERSION = ' 2.8 . * '-php:5.6env:欧宝娱乐app下载地址SYMFONY_VERSION = ' 3.0 . * '-php:5.6env:欧宝娱乐app下载地址SYMFONY_VERSION = ' 3.1 . * '-php:5.6env:依赖项=‘开发’欧宝娱乐app下载地址SYMFONY_VERSION = ' 3.2 . * @dev 'before_install:-作曲家的由来-如果[“依赖美元”= =“开发”];然后perl-π- e/ ^} $ /,“minimum-stability”:“开发”}/的composer.json;fi;-如果[“S欧宝娱乐app下载地址YMFONY_VERSION美元”! =""];然后作曲家——没有进行过更新需要欧宝娱乐app下载地址symfony / symfony: $ {SYMFONY_VERSION};fi;安装:作曲家更新COMPOSER_FLAGS美元脚本:phpunit)
更新代码以支持Symfony 2。欧宝娱乐app下载地址X和3。x在同一时间
为您的包添加Symfony 3支持的真正挑战是当您希望同时欧宝娱乐app下载地址支持Symfony 2时。X和3。X同时使用相同的代码。有一些边缘情况需要处理API差异。
在深入研究最常见的边缘情况的细节之前,一般的建议是不依赖Symfony内核版本欧宝娱乐app下载地址决定使用哪个代码:
1 2 3 4 5
如果(内核::VERSION_ID <20800){// Symfony 2欧宝娱乐app下载地址.x的代码}其他的{// Symfony 3欧宝娱乐app下载地址.x的代码}
不要检查Symfony内核版本,而是检查特定组件欧宝娱乐app下载地址的版本。例如,OptionsResolver API在2.6版本中添加了一个setDefined ()
方法。在这种情况下,建议检查如下:
1 2 3 4 5 6 7
使用欧宝娱乐app下载地址\组件\OptionsResolver\OptionsResolver;如果(!method_exists (OptionsResolver::类,“setDefined”)) {//旧的OptionsResolver API的代码}其他的{//新的OptionsResolver API的代码}
提示
有一种情况,你实际上可以依赖欧宝娱乐app下载地址Symfony \组件\ HttpKernel \内核:VERSION_ID
常量:当试图检测版本时欧宝娱乐app下载地址symfony / http-kernel
组件,因为这个常量就是在组件中定义的。