我希望在我的Web应用程序中有一个服务和类名列表。我可以在控制台中使用此命令:


 php bin / console debug:container


&# xA; 我得到这样的东西:


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

 -------------------------------------------------- ------------------ -------------------------------- -------------------------------------------------- ----------
服务ID类名称
 -------------------------------------------------- ------------------ -------------------------------- -------------------------------------------------- ----------
 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的网页上获取此信息。


我创建了一项服务并使用了:


 $ this-> container-> getServiceIds(); 



 返回类似于:


 [&#xA ; 0 => “service_container” 
 1 => “annotation_reader” 
 2 => “annotations.reader” 
 3 => “app.annotations.softdelete.driver” 
 4 => “app.annotations.translate.driver”
 ...
]



 我不知道,如何获取类名。


在任何情况下都可以这样工作:


 get_class($ this - >容器 - >获得($这 - >容器 - > getServiceIds()[1]))
 代码>


 但是在其他一些情况下,它会抛出不同的例外。


你有什么想法吗?


谢谢。

答案 0 :(得分:3)
我在阅读时会想到get_class
的尝试,但是你得到的任何错误都来自于不正确地获取这些服务。毕竟当你打电话给$container->get(...)
时,它会在那一刻实例化那些类。
老实说,您要复制的输出可以根据该命令使用的方法进行复制。
https://github.com/symfony/framework-bundle/blob/master/Command/ContainerDebugCommand.php
你只需要让它适应你。
答案 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();