2017-05-24 3 views
0

웹 응용 프로그램에 서비스 및 클래스 이름 목록이 필요합니다. 나는 콘솔에서이 명령을 사용할 수 있습니다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 

나는 내가 만든

심포니 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])) 

그러나 일부 다른 경우에 다른 예외를 throw

.

의견이 있으십니까?

감사합니다.

답변

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(); 
3

get_class으로 시도한 내용이 제가 읽은 것처럼 생각 났지만 오류가 발생하는 것은 부적절한 서비스 가져 오기에서 비롯됩니다. 결국 $container->get(...)에 전화하면 그 순간에 해당 클래스를 인스턴스화합니다.

복제하려는 출력은 해당 명령에서 사용하는 방법에 따라 복제 할 수 있습니다.

https://github.com/symfony/framework-bundle/blob/master/Command/ContainerDebugCommand.php

당신은 당신을 위해 작동하도록 적응해야합니다.

관련 문제