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 に答える