2017-05-24 51 views
0

我想在我的web应用程序中有一个服务和类名的列表。我可以在控制台使用这个命令:如何在Symfony中以编程方式获得服务列表?

php bin/console debug:container 

我得到这样的:

Symfony Container Public Services 
================================= 

-------------------------------------------------------------------- -------------------------------------------------------------------------------------------- 
    Service ID               Class name 
-------------------------------------------------------------------- -------------------------------------------------------------------------------------------- 
    annotation_reader             Doctrine\Common\Annotations\CachedReader 
    app.annotations.softdelete.driver         AppBundle\Doctrine\SoftDelete\Mapping\Driver\Annotation 
    app.annotations.translate.driver          AppBundle\Doctrine\Mapping\Driver\TranslateDriver 
    app.be_auth_controller.listener          AppBundle\EventListener\BeAuthControllerListener 

我想有使用的Symfony 3.

我创建了一个网页上的信息服务,我使用:

​​

返回类似:

[ 
    0 => "service_container" 
    1 => "annotation_reader" 
    2 => "annotations.reader" 
    3 => "app.annotations.softdelete.driver" 
    4 => "app.annotations.translate.driver" 
... 
] 

我不知道,如何得到类名。

在任何情况下,本工作:

get_class($this->container->get($this->container->getServiceIds()[1])) 

但在另一些情况下,它抛出不同的异常。

你有什么想法吗?

谢谢。

回答

1

要获得给定服务的完整定义,可以使用ContainerBuilder和Symfony缓存文件。

首先创建ContainerBuilder的实例:

$container = new ContainerBuilder(); 

然后加载缓存文件:

$cachedFile = $this->container->getParameter('debug.container.dump'); 
$loader = new XmlFileLoader($container, new FileLocator()); 
$loader->load($cachedFile); 

现在你可以得到你的服务的完整定义是这样的:

$definition = $container->getDefinition('service_name') 
$definition->getClass(); 
相关问题