gpt4 book ai didi

symfony - 有没有办法将 EntityManager 注入(inject)服务

转载 作者:行者123 更新时间:2023-12-04 13:05:45 25 4
gpt4 key购买 nike

使用 Symfony 3.3 时,我正在声明这样的服务:

class TheService implements ContainerAwareInterface
{
use ContainerAwareTrait;
...
}

在我需要 EntityManager 的每个操作中,我从容器中获取它:
$em = $this->container->get('doctrine.orm.entity_manager');

这有点烦人,所以我很好奇 Symfony 是否有类似 EntityManagerAwareInterface 的东西。 .

最佳答案

传统上,您会在 services.yml 中创建一个新的服务定义。文件设置entity manager作为构造函数的参数

app.the_service:
class: AppBundle\Services\TheService
arguments: ['@doctrine.orm.entity_manager']
最近,随着 Symfony 3.3 的发布,默认的 symfony-standard-edition 改变了他们的默认 services.yml文件默认使用 autowire并在 AppBundle 中添加所有类成为服务。这消除了添加自定义服务的需要,并且在构造函数中使用类型提示将自动注入(inject)正确的服务。
您的服务类将如下所示:
use Doctrine\ORM\EntityManagerInterface;

class TheService
{
private $em;

public function __construct(EntityManagerInterface $em)
{
$this->em = $em;
}

// ...
}
有关自动定义服务依赖关系的更多信息,请参阅 https://symfony.com/doc/current/service_container/autowiring.html
新的默认 services.yml配置文件在这里: https://github.com/symfony/symfony-standard/blob/3.3/app/config/services.yml

关于symfony - 有没有办法将 EntityManager 注入(inject)服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44809739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com