Symfony依赖注入:如何排除Domain目录下非Repository类?
关于Symfony依赖注入自动装配排除规则的问题
我们使用Symfony Dependency Injection Service已有一段时间,此前均手动关联每个服务与其接口,现在希望通过自动装配实现自动化配置,但在exclude选项的配置上遇到了问题。
此前发现多排除路径仅在高版本Symfony中支持,因此已升级至当前PHP版本兼容的最新Symfony 5.4版本。现在可以正常配置路径列表,但无法设置带否定逻辑的排除路径。根据官方文档,exclude支持合法的glob模式,但我们尝试的多种模式均无效。
具体需求
排除Domain目录下所有非Repository类,示例如下:
- 需保留的文件:
Domain/Repository/IUserRepository.php(不应被排除) - 需排除的文件:
Domain/Repository/UserRepository/UserDTO.php(应被排除)
已尝试的glob模式
我们试过以下几种glob模式,但均未达到预期效果:
Domain/**/!(*Repository.php)Domain/**/!(*Repository).phpDomain/**/[!]*Repository.php
调试后发现,这些模式转换为正则表达式时会保留原始的!字符,无法实现否定匹配的逻辑。
问题
是否存在Symfony可识别的单glob模式,能够实现排除Domain目录下所有非Repository类的需求?
补充说明
我们了解到相关的Issue和PR已被拒绝,原因可能涉及性能影响或需要整合更多glob变体。目前我们倾向于两种替代方案:
- 排除Repository目录以外的所有内容
- 将非Repository文件统一重命名为DTO后缀,再通过后缀匹配排除
但仍希望找到更直接的解决方案。
内容的提问来源于stack exchange,提问作者Lennert
相关产品推荐
相关产品推荐

