Symfony:findTaggedServiceIds()返回空数组

时间:2013-05-16 08:24:08

标签: symfony dependency-injection

我的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不是我的选择。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

Okidok,

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

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

见这里:

Symfony2 - Find tagged services in command http://api.symfony.com/2.1/Symfony/Component/DependencyInjection/TaggedContainerInterface.html http://symfony.com/doc/2.1/cookbook/service_container/compiler_passes.html