Symfonyob娱乐下载 4.4新增功能:服务容器连接器
2019年11月21日·发表的哈维尔Eguiluz
ob娱乐下载Symfony包含大量的剥绒机,这些命令用于验证应用程序的某些部分(例如。线头:yaml
检查所有YAML配置文件的语法;线头:树枝
检查所有Twig模板的语法,等等)
在Syob娱乐下载mfony 4中,我们添加了一个新的linter线头:容器
.方法中定义的服务容器.具体来说,它确保注入服务的参数与类型声明匹配。
考虑以下为服务创建的类:
1 2 3 4 5 6 7 8 9
名称空间应用程序\SomeNamespace;类SomeService{公共函数__construct(int$someProperty=7){/ /……}}
如果您现在尝试添加以下服务配置:
1 2 3
#配置/ services.yaml服务:App \ SomeNamespace \ SomeService:~
运行时,您将看到以下错误线头:容器
命令:
1 2
服务“App\SomeNamespace\SomeService”的定义无效:“App\SomeNamespace\SomeService::__construct”的参数1接受“int”,“NULL”传递。
新的容器检测器走得更远,它可以检测如下错误。用可变方法考虑这个类:
1 2 3 4 5 6 7 8 9
名称空间应用程序\SomeNamespace;类SomeService{公共函数setSomeItems(SomeClass$项,某类……$项目){/ /……}}
如果您使用以下服务定义:
12 3 4 5 6 7 8 9 10 11 12 13
#配置/ services.yaml服务:foo:类:App \ SomeNamespace \ SomeClass栏:类:App \ AnotherNamespace \ SomeDifferentClassApp \ SomeNamespace \ SomeService:电话:-方法:setSomeItems参数:-“@foo”-“@bar”
运行时,您将看到以下错误线头:容器
命令:
1 2 3
服务"App\SomeNamespace\ someeservice "的定义无效:"App\SomeNamespace\ someeservice::setSomeItems"的参数2接受"App\SomeNamespace\SomeClass", "App\AnotherNamespace\SomeDifferentClass"传递。
如果您正在使用持续集成服务,请考虑将此新命令添加到每次构建时执行的linter列表中。看看这个链接这是我们如何为Symfony Demo应用程序做到这一点的一个例子。ob娱乐下载
在编译容器时检查所有服务的所有参数类型可能会损害性能。这就是为什么这种类型检查是在编译器中实现的CheckTypeDeclarationsPass
默认禁用,仅在执行线头:容器
命令。如果您不介意性能损失,可以在应用程序中启用编译器传递。
发表在#生活在边缘
评论
约瑟夫Kufner
2019年11月21日说在09:44
#1
太棒了!
mikl
2019年11月21日说在20:52
#2
神奇的!
Vazgen Manukyan
2019年11月25日说从9点半
# 3
太棒了!
埃姆雷Akinci
2019年12月1日说在15:26
# 4
太好了!非常感谢。
评论截止。
为了确保评论保持相关性,旧帖子将被关闭。