Contributed by
Nicolas Grekas
Ryan Weaver
in #21289
and #22680.
Symfony 3.3将会引入大量“简化你在程序中使用服务”的功能,诸如 简化配置 和 autoconfig自动配置 等。本文解释后一个同Dependency Injection相关的重大功能: PSR-4 based service discovery and registration(基于PSR-4的服务的发掘以及注册)。
理念是,在给定目录中查找PHP类,并把它们注册为服务,如果它们的命名空间符合PSR-4的命名语法(naming syntax)的话。此功能使用 resource
选项进行配置,该选项接受一个目录路径,或一个Glob expression以匹配多个目录。例:
1 2 3 4 5 6 7 8 9 10 11 12 | services:
# ...
# this creates a service per class whose id is the fully-qualified class name
# 这会为每个类创建一个服务,服务id是FQCN(完整类名)
App\:
resource: '../../src/{Command,Form,EventSubscriber,Twig,Security}'
App\Controller\:
resource: '../../src/Controller'
public: true
tags: ['controller.service_arguments'] |
如果你的程序包含许多目录,你可以使用 resource
选项中的 *
值来全部包容之,然后再根据需要使用 exclude
选项来排除一些目录:
1 2 3 4 5 6 7 8 9 10 | services:
# ...
AppBundle\:
# discover services in all AppBundle/ sub-directories...
# 在 AppBundle/ 的全部子目录中发现服务
resource: '../../src/AppBundle/*'
# ... except in those matching this Glob expression
# ... 不包括那些匹配了下面这个Glob表达式的类
exclude: '../../src/AppBundle/{AppBundle.php,Entity}' |