如何在自定义类中获取服务(依赖项)

Jie*_*eng 23 symfony

在控制器中,我能做到

$this->get('service.name')
Run Code Online (Sandbox Code Playgroud)

但在自定义课程中,我该怎么做?

Ste*_*nte 26

将自定义类定义为服务,然后将依赖项注入其中.

例如:

// services.yml
services:
   my.custom.service.id:
       class: My\Custom\Class
       arguments:
         - @service.name
         - @doctrine.orm.entity_manager
Run Code Online (Sandbox Code Playgroud)

然后,您的自定义类的构造函数将获取这些服务作为参数.

请务必阅读官方文档中的服务容器.它非常详细地讨论了这一切.


Ino*_*ryy 8

您使用ContainerAware进入了正确的轨道.

$this->get('id')实际上是一个快捷方式$this->container->get('id').将容器放入您的课程就像实施一样简单ContainerAwareInterface- 将此片段放入您的班级:

public function setContainer(\Symfony\Component\DependencyInjection\ContainerInterface $container = null)
{
    $this->container = $container;
}
Run Code Online (Sandbox Code Playgroud)

  • 对于那些放-1的人:我真的想解释为什么你认为我的答案是错的,什么是正确的答案.请记住,问题基本上是:"如何将服务容器注入自定义类?" (5认同)
  • 他询问如何访问自定义类中的服务,而不是如何将特定服务注入其中,他甚至从控制器中给出了一个示例,并且正在寻找自己复制行为的方法.仅仅因为在情境上糟糕的做法而忽略了一个非常正确的答案是非常错误的,因为我们没有给出完整的用例来决定.所以我真的希望这不是-1背后的推理. (5认同)
  • 我不是那个被投票的人,但最初的问题是如何在自定义类中访问服务,而不是如何注入服务容器(这被认为是不好的做法.) (3认同)