php 如何在Symfony中按路径标记服务?

bjp0bcyl  于 2023-02-07  发布在  PHP
关注(0)|答案(1)|浏览(114)

在Symfony应用程序中,如何自动标记特定目录中的所有类?
services.yaml中,我有:

services:
    App\Service\TaggableServicesDirectory\:
        resource: '../src/Service/TaggableServicesDirectory/*'
        tags: ['app.my_tag']

然而,这些服务实际上并没有被标记,我可以通过运行bin/console debug:container --tag=app.my_tag看到这一点,它返回了一个关于不存在标记的错误。
我也尝试过按父类标记:

services:
    _instanceof:
        App\Service\TaggableServicesDirectory\AbstractTaggableService:
            tags: ['app.my_tag']

这和预期的一样工作,所以我知道路径和标记名是正确的。但是,按父类标记对我的用例来说并不理想。

    • EDIT:第一个示例中的配置在新的Symfony项目上按预期工作,因此可能是我的主项目上的其他一些不正确的配置。**
dxxyhpgq

dxxyhpgq1#

遗憾的是,您不能像示例中那样指定目录,但是您可以通过为每个对象单独指定类名和标记来手动指定目录。

services:
    App\Service\TaggableServicesDirectory\ClassOne:
        tags: ['app.my_tag']

但是,要自动绑定标记,请使用symfony documentation中推荐的接口。

#[AutoconfigureTag('app.my_tag')]
interface CustomTagInterface
{
    // ...
}

然后在类中实现这个接口。

相关问题