使用 Symfony 自动装配时是否可以排除多个目录?

Is it possible to exclude multiple directories when using Symfony autowire?

在 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}'

但它不起作用:(

排除一些目录为服务容器初始化和服务自动加载处理带来一些收益和效率......

但是,通过 'exclude' 服务配置选项也可以实现其他一些重要功能:

  • 恕我直言,'exclude' 选项的一个很好的动机,还允许管理 PSR-4 自动加载与内部包(在 src/ 目录下)的冲突。
  • 排除子目录块是保护 SF4 应用程序中的内部包命名空间的安全方法。这也防止了内部包和应用包之间的自动加载冲突,少了 SF4 的一部分。

  • 你的情况,最好手动指定每个FolderToExclude的路径,检查是否与App子文件夹没有跨界。

  • 如果要排除的子目录数量太多,您无法逐一列举,那么您首先肯定会遇到代码 design/organization 问题需要解决。

希望这对您的设计决策有所帮助。

在 Symfony 4.1 中。但是 is an closed bug and a pull request 可能会使此功能可用于 symfony 4.2!