Php 如何在Symfony中以编程方式获取服务列表?
我想在我的web应用程序中有一个服务和类名的列表。我可以在控制台中使用此命令:Php 如何在Symfony中以编程方式获取服务列表?,php,symfony,Php,Symfony,我想在我的web应用程序中有一个服务和类名的列表。我可以在控制台中使用此命令: php bin/console debug:container 我得到了这样的结果: Symfony Container Public Services ================================= -------------------------------------------------------------------- ---------------------------
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
$definition = $container->getDefinition('service_name')
$definition->getClass();
我想在使用Symfony 3的网页上显示此信息
我创建了一个服务,并使用了:
$this->container->getServiceIds();
返回类似于:
[
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]))
但在其他一些情况下,它会引发不同的异常。当我阅读它时,我想到的是您尝试使用get_类,但无论您遇到什么错误,都将来自对这些服务的不正确获取。毕竟,当您调用$container->get…,它就在此时实例化这些类
老实说,您希望复制的输出可以根据该命令使用的方法进行复制
您只需要调整它以适应您的工作。当我阅读它时,您对get_类的尝试就是我想到的,但是您所遇到的任何错误都将来自对这些服务的不正确获取。毕竟,当您调用$container->get…,它就在此时实例化这些类
老实说,您希望复制的输出可以根据该命令使用的方法进行复制
您只需对其进行调整以适应您的需要。要获得给定服务的完整定义,您可以使用ContainerBuilder和Symfony缓存文件 ContainerBuilder的第一个创建实例:
$container = new ContainerBuilder();
然后加载缓存文件:
$cachedFile = $this->container->getParameter('debug.container.dump');
$loader = new XmlFileLoader($container, new FileLocator());
$loader->load($cachedFile);
现在,您可以像下面这样获得服务的完整定义:
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
$definition = $container->getDefinition('service_name')
$definition->getClass();
要获得给定服务的完整定义,可以使用ContainerBuilder和Symfony缓存文件 ContainerBuilder的第一个创建实例:
$container = new ContainerBuilder();
然后加载缓存文件:
$cachedFile = $this->container->getParameter('debug.container.dump');
$loader = new XmlFileLoader($container, new FileLocator());
$loader->load($cachedFile);
现在,您可以像下面这样获得服务的完整定义:
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
$definition = $container->getDefinition('service_name')
$definition->getClass();