Symfony 3.3包含了一些重大的服务配置功能。我们在这里解释了它: Symfony 3.3服务容器变化详解。
2个星期之内,Symfony 3.3会发布。它有很多新东西,但有一个功能极其重要: 全新的服务配置。我 非常 期待这些改变:它们的设计是为了加速开发,令Symfony更容易学习,同时提倡最佳实践 (例如要注入特定的依赖而不是 $container->get()
)... 而没有牺牲可预测性和稳定性。
如果你还没体验过它,在全新的Symfony 3.3项目中 services.yml
文件看上去像下面这样:
1 2 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 31 32 33 34 35 | services:
# default configuration for services in *this* file
# 作用于 *本文件* 之内的服务的默认配置
_defaults:
# automatically injects dependencies in your services
# 在你的服务中自动注入依赖
autowire: true
# automatically registers your services as commands, event subscribers, etc.
# 将服务自动注册为命令,事件订阅器,等等
autoconfigure: true
# this means you cannot fetch services directly from the container via $container->get()
# if you need to do this, you can override this setting on individual services
# 表示不可以通过 $container->get() 直接从容器中取出服务
# 如果你需要这样配置,你可以在单一服务的配置中覆写此项
public: false
# makes classes in src/AppBundle available to be used as services
# this creates a service per class whose id is the fully-qualified class name
# 让 src/AppBundle 中的所有类变成服务
# 以这种方式创建服务时使用类的FQCN作为服务id
AppBundle\:
resource: '../../src/AppBundle/*'
# you can exclude directories or files
# but if a service is unused, it's removed anyway
# 你可以排除目录或文件,但如果某个服务未被使用,它会被移除
exclude: '../../src/AppBundle/{Entity,Repository}'
# controllers are imported separately to make sure they're public
# and have a tag that allows actions to type-hint services
# 逐控制器地分别地导入服务,以确保其是公有的
# 并且拥有一个标签,以允许actions能够对服务进行type-hint(类型提示)
AppBundle\Controller\:
resource: '../../src/AppBundle/Controller'
public: true
tags: ['controller.service_arguments'] |
还有很多,包括服务的自动注册,自动关联,以及自动标签 (autoconfigure
)等
当然了,这些功能是 (而且永远是) 可选的: 你可以把自己的项目升级到Symfony 3.3 而不改动任何配置。但是我希望你能给这些新功能一个机会: 我已经升级了一个大项目并且很 喜欢 这些功能。
我们已经在文档体系中增加了一篇深度文章来解析这些功能:Symfony 3.3服务容器变化详解。
测试一下吧,并且让我们知道你的想法!