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

Posted

技术标签:

【中文标题】使用 Symfony 自动装配时是不是可以排除多个目录?【英文标题】:Is it possible to exclude multiple directories when using Symfony autowire?使用 Symfony 自动装配时是否可以排除多个目录? 【发布时间】:2018-06-26 16:32:56 【问题描述】:

在 Symfony 4 中使用 autowire 时,我使用了这个工作代码:

App\:
    resource: '../src/*'
    exclude: '../src/Domain,Entity,Migrations,Tests'

该代码从自动装配中排除了所有这些文件夹:

- src/Domain
- src/Entity
- src/Migrations
- src/Tests

没关系,但是当我想排除分散在另一个文件夹中的多个同名文件夹时,问题就来了。

例如,如果我们有这样的结构:

src/Folder1/FolderToExclude src/Folder2/Folder2-1/FolderToExclude

¿有什么方法可以排除所有名为 FolderToExclude 的文件夹吗?

我已经尝试了以下代码,但有一些小的变化:

App\:
    resource: '../src/*'
    exclude: '../src/Domain,Entity,Migrations,Tests,**/FolderToExclude'

但它不起作用:(

【问题讨论】:

尝试排除:'../src/**/FolderToExclude' 但我也需要排除 ../src/Domain,Entity,Migrations,Tests 你试过'../src/**/Domain,Entity,Migrations,Tests,FolderToExclude'吗? 【参考方案1】:

在 Symfony 4.1 中。但是is an closed bug 和pull request 可能会使这个特性在 symfony 4.2 中可用!

【讨论】:

【参考方案2】:

排除部分目录为服务容器初始化和服务自动加载处理带来一定的收益和效率……

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

恕我直言,“排除”选项的一个很好的动机,也允许管理 PSR-4 自动加载与内部包的冲突(在 src/ 目录下)。

排除子目录块是保护 SF4 应用程序中内部包命名空间的安全方法。这还可以防止内部包和 SF4 的 App 包较少部分之间的自动加载冲突。

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

如果要排除的子目录的数量太大而您无法单独列举它们,那么您首先肯定会遇到代码设计/组织问题需要解决。

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

【讨论】:

以上是关于使用 Symfony 自动装配时是不是可以排除多个目录?的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 3.4 自动装配服务

Symfony 4 不自动装配动态路由控制器

无法自动装配服务 FOSUserBundle,Symfony 3.4

Hwi oauth bundle 和 Symfony 3.4 无法自动装配服务:如何在 symfony 3.4 + FOSUserBundle 中使用 hwi/oauth-bundle

从头认识Spring-2.1 自动装配-byType

无法自动装配服务:参数引用类但不存在此类服务