2013-05-16 2 views
0

my symfony 2.1 프로젝트 findTaggedServiceIds()를 맞춤 서비스 내에 사용하고 싶습니다.Symfony : 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와 함께 컴파일러 패스를 사용할 수있는 옵션이 없습니다.

도움을 주시면 감사하겠습니다.

답변

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

관련 문제