我有symfony项目和在这个项目中,我有自己的服务,这个服务又大又复杂,有自己的依赖关系等……
我想创建 facade对于此服务,目的是在 controllers
中使用我的服务,例如:
$myService = $this->container->get('service_from_my_domain');
我的问题 - 是如何在我的门面内部访问 container
以访问服务的依赖项。我只知道一种方法——在 yaml 配置中将依赖项注入(inject)服务。
但是还有别的办法吗?喜欢:
$dependency = Container::getInstance()->get('my_dependency_service');
我找到了 this answer但是使用全局变量感觉就像回到了过去......
PS:我不想通过 yaml 配置注入(inject)依赖项(不是构造函数注入(inject)也不是 setter 注入(inject)),因为我在这里不需要 IoC(inversion-of-control)。
最佳答案
你能这样吗
services:
kernel.listener.acme_listener:
class: Acme\AcmeBundle\EventListener\AcmeListener
arguments:
- @service_container
tags:
- { name: kernel.event_listener, event: kernel.controller, method: onKernelController }
你的听众
use Symfony\Component\DependencyInjection\Container;
use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
class AcmeListener
{
/**
* @var Container
*/
private $container;
/**
* Constructor
*
* @param Container $container
*/
public function __construct(Container $container)
{
$this->container = $container;
}
public function onKernelController(FilterControllerEvent $event)
{
$this->container->...
}
}
关于php - Symfony 如何在我的服务中获取容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45965327/