0

我的 symfony 2.1 项目我想在自定义服务中使用 findTaggedServiceIds() 。

服务:

class GetServiceMaps 
{
    private $container;

    public function __construct($container) 
    {
        $this->container = $container;
    }

    public function getServices()
    {  
        $taggedServices = $this->container->findTaggedServiceIds(
            'efg_statistic.service');

        return $taggedServices;
    }
}

我的 service.yml:

parameters:
efg_identity.get_where_dql.class: \GetWhereDql
efg_statistic.get_service_maps.class: \GetServiceMaps
symfony.container_builder.class: \ContainerBuilder

services:
   symfony.container_builder:
   class: %symfony.container_builder.class%

   .get_where_dql:
   class: %efg_identity.get_where_dql.class%
   calls:
     - [getMapping, ["@efg_identity.get_where_dql"]]
   tags: 
     - { name: efg_statistic.service }

   .get_service_maps:
   class: %efg_statistic.get_service_maps.class%
   arguments: ["@symfony.container_builder"]

我的问题是打电话

$taggedServices = $container->getServices();

返回一个空数组。我想这与我注入了一个新的 ContainerBuilder 实例有关,但是为了调用 findTaggedServiceIds 我不知道如何绕过它。

不幸的是,使用 CompilerInterface 编译器传递对我来说不是一个选项。

任何帮助深表感谢!

4

1 回答 1

0

奥基多克,

问题是在查找标记服务时无法使用 CompilerPass 接口。

标签仅在编译时可用,这意味着容器仅在编译时实现 TaggedContainerInterface。

看这里:

Symfony2 - 在命令中查找标记服务 http://api.symfony.com/2.1/Symfony/Component/DependencyInjection/TaggedContainerInterface.html http://symfony.com/doc/2.1/cookbook/service_container/compiler_passes.html

于 2013-05-16T09:18:16.407 回答