在Controller中,我使用的服务包括:
$this->get('version')->doSomething();
如何从存储库中执行相同操作?
注意:我不想在Repository构造函数中注入服务,因为我只在许多Repository方法中使用该服务。
答案 0 :(得分:1)
CONDA_DEFAULT_ENV
要求您将DI容器注入控制器构造函数。它是在Symfony控制器的幕后完成的。
因此,访问您的服务的两种方法是注入整个容器(这是一个反模式,但每个人都使用它)或者只将您的服务注入另一个类。
如果您不想将服务注入构造函数,请使用setter injection。
services.yml:
$this->get('service')
服务类
app.newsletter_manager:
class: AppBundle\SomeRepository
calls:
- [setService, ['@service']]
答案 1 :(得分:1)
将服务注入存储库是不良做法,您不应该这样做。
虽然如果想要与get->('any.service')
一起使用的解决方案,它将如下所示:
在services.yml
app.some_service:
class: 'AppBundle\Repositories\SomeEntityRepository'
factory: ["@doctrine.orm.entity_manager", getRepository]
arguments:
- 'AppBundle\Entity\SomeEntity'
calls:
- [setContainer, ["@service_container"]]
在您的存储库类中:
class SomeEntityRepository implements ContainerAwareInterface
{
use ContainerAwareTrait;
public function foo()
{
$bar = $this->container->get('app.bar_service');
}
}
注入个人服务而不是服务容器也更好。