在 Symfony 4 中使用 autowire 时,我使用了这个工作代码:
App\:
resource: '../src/*'
exclude: '../src/{Domain,Entity,Migrations,Tests}'
该代码从自动装配中排除所有这些文件夹:
- src/Domain
- src/Entity
- src/Migrations
- src/Tests
没关系,但是当我想排除分散在另一个文件夹中的多个同名文件夹时,问题就来了。
例如,如果我们有这样的结构:
¿有没有办法排除所有名为FolderToExclude的文件夹?
我已经尝试过以下代码,但有一些小的变化:
App\:
resource: '../src/*'
exclude: '../src/{Domain,Entity,Migrations,Tests,**/FolderToExclude}'
但是不起作用:(
排除某些目录为服务容器初始化和服务自动加载处理带来一些效率提升...
但是,通过“排除”服务配置选项也可以实现其他一些重要功能:
排除子目录块是保护 SF4 应用程序中内部包命名空间的安全方法。这还可以防止内部捆绑包和 SF4 的应用程序捆绑包之间的自动加载冲突。
在您的情况下,最好手动指定每个FolderToExclude的路径,检查与App子文件夹没有跨界。
希望这对您的设计决策有所帮助。
自 SF3 起:“资源和排除选项的值可以是任何有效的全局模式。”
自 SF4 起,增加了一项内容:“排除选项的值也可以是全局模式的数组。”
这仍然是当前的(当前是 SF7):https://symfony.com/doc/current/service_container.html#service-container-services-load-example
Glob 模式(wiki)完全可以满足您的要求, 例如
# config/services.yaml
services:
App\:
resource: '../src/*'
exclude:
- '../src/Something/Deep/**/Dto'
您遇到的问题似乎是重叠
{}
和 glob 模式,我不确定这是允许的。
因此,这应该有效:
App\:
resource: '../src/*'
exclude:
- '../src/{Domain,Entity,Migrations,Tests}'
- '../src/**/FolderToExclude'