我的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不是我的选择。
非常感谢任何帮助!
答案 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