php - Symfony 如何在我的服务中获取容器

标签 php symfony design-patterns inversion-of-control 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()。

最佳答案

你能这样吗

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/

相关文章:

php - 从两个逗号分隔的字符串中删除重复项

php - Tomcat Quercus Php 无法正常工作

python - 处理文本文件的通用算法/模式

php - 自然语言理解 API

PHP Cookie 安全问题

php - Doctrine 的 Symfony Bundle repo 发生了什么?

php - Symfony 4 - 验证从 Vue 发送的表单

symfony - 将参数传递给 Symfony 2.8 中的嵌入式 Controller

c# - 我应该在哪里放置接口(interface)和实现

c++ - C++中接口(interface)类和实现类的并行继承