使用Symfony autowire时是否可以排除多个目录?

时间:2018-01-17 17:50:43

标签: php symfony autowired symfony4

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

但它不起作用:(

2 个答案:

答案 0 :(得分:2)

在Symfony 4.1中。但有is an closed bugpull request可以使这个功能可用于symfony 4.2!

答案 1 :(得分:0)

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

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

  • 恕我直言,'排除'选项的一个非常好的动机,也允许管理内部捆绑(在src /目录下)的PSR-4自动加载冲突。
  • 排除子目录块是保护SF4应用程序中内部包名称空间的安全方法。这也可以防止内部捆绑包与App捆绑包之间的自动加载冲突,而不是SF4的一部分。

  • 在您的情况下,最好手动指定每个FolderToExclude的路径,检查与App子文件夹没有交叉边界。

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

希望这有助于您的设计决策。