在 Symfony 依赖注入服务中,我可以排除所有不以特定后缀结尾的文件吗?

In the Symfony Dependency Injection Service, can I exclude all files in not ending in a specific suffix?

提问人:Lennert 提问时间:11/16/2023 最后编辑:Lennert 更新时间:11/16/2023 访问量:32

问:

我们使用 Symfony 依赖注入服务已经有一段时间了,但我们必须手动将每个服务链接到它的接口。 我想通过自动布线来自动化这一点,但我在排除选项上遇到了一些问题。

我注意到只有在更高版本中才能提供多个排除路径,因此我更新到当前 PHP 版本可以支持的最新版本 (v5.4)。

现在我可以成功地提供路径列表,但我不知道如何提供包含否定的路径。 文档提到排除选项可以是任何有效的 glob 模式,但即使我相信我的 glob 模式是有效的,它也不起作用。

例如,我想从我的域文件夹中排除所有非存储库类

  • 不应排除 Domain/Repository/IUserRepository.php =>
  • 应排除 Domain/Repository/UserRepository/UserDTO.php =>

我尝试过使用以下模式:

  • 域/**/!(*存储库.php)
  • 域/**/!(*存储库).php
  • 域/**/[!]*存储库.php

但是,在代码内部进行调试时,当将模式转换为正则表达式时,它会原始地传递“!”字符。

有没有办法使用由 Symfony 处理的单个 glob 模式从 Domain 文件夹中排除所有非存储库类?


编辑:我在他们的 GitHub 上发现了一个被拒绝的问题和 PR:https://github.com/symfony/symfony/pull/35737

听起来他们要么认为这会对性能产生太大影响,要么想等到他们可以一次集成更多的 glob 模式“变体”。

如果有人仍然为我提供解决方案,那就太好了,但现在我倾向于排除除“存储库”文件夹之外的所有内容,并在其中重命名/移动所有其他文件以具有 DTO 后缀并排除这些文件。

PHP symfony glob

评论


答:

0赞 delboy1978uk 11/16/2023 #1

你离得很近!试试这个:

Domain/**/*[!Repository].php

如果您不想要存储库类,并且

Domain/**/*Repository.php

如果您确实需要存储库 claases

您可以在此处使用此 glob 模式测试器 https://www.digitalocean.com/community/tools/glob?comments=true&glob=Domain%2F%2A%2A%2F%2A%5B%21Repository%5D.php&matches=false&tests=Domain%2FRepository%2FIUserRepository.php&tests=Domain%2FRepository%2FUserRepository%2FUserDTO.php

评论

0赞 Lennert 11/16/2023
嗨,我一直在使用这个网站来测试我的模式:globster.xyz 我尝试了你的模式,但我遇到了同样的问题。!和 [ 字符不被识别为特殊字符,只是添加到正则表达式中。