捆绑包中的 Symfony _defaults

Symfony _defaults in bundles

我是 Symfony 的新手,对依赖注入有一些疑问,尤其是 Symfony 3.3

  1. 新的 _defaults 块是否可以为每个单独的捆绑包单独声明,或者它是全局的并在托管应用程序中定义?

  2. 我可以在我的可重用包中像自动装配一样使用 the new things 还是我必须单独声明所有包的服务?

  1. 这是每个文件声明。您还可以在单​​个服务定义中覆盖它。例如

    # app/config/services.yml
    services:
        _defaults:
            autowire: true
    
        App\SomeService:
            autowire: false
    
  2. 简而言之:是的。

我觉得你在问如何将所有这些功能组合在一起什么是最佳实践。话虽如此,我将用服务定义的多捆绑示例扩展我的答案。

包含 2 个 Bundle 的应用程序看起来像这样

imports:
    - { resource: "../../src/FirstBundle/config/services.yml" }
    - { resource: "../../src/SecondBundle/config/services.yml" }

services:
    _defaults:
        autowire: true

    App\SomeService:
        autowire: false

第一个捆绑包:

# src/FirstBundle/config/services.yml

services:
    _defaults:
        autowire: true

    App\FirstBundle\:
        resource: ../..

第二个捆绑包:

# src/SecondBundle/config/services.yml

services:
    _defaults:
        autowire: true

    App\SecondBundle\:
        resource: ../..

一个额外小费

此外,由于 glob patterns,您可以将第一个文件改进为 只需单行导入

use it in practise喜欢这样:

imports:
    - { resource: "../../src/**/config/services.yml" }

services:
    _defaults:
        autowire: true

    App\SomeService:
        autowire: false

您可以在 this post with before/after config examples.

中阅读有关 Symfony 3.3 依赖注入功能的更多信息