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服务容器变化详解

测试一下吧,并且让我们知道你的想法!