gpt4 book ai didi

dependency-injection - 如何将服务注入(inject)实体存储库 Symfony2 原则?

转载 作者:行者123 更新时间:2023-12-04 08:22:39 25 4
gpt4 key购买 nike

如何使用依赖注入(inject)将服务注入(inject)实体存储库?

我尝试这样:

<service id="rp.repository.user" class="RP\CoreBundle\Repository\UserRepository" 
factory-service="doctrine.orm.entity_manager" factory-method="getRepository">
<call method="setSecurityContext">
<argument type="service" id="security.context"/>
</call>
</service>

但是从未调用过 setSecurityContext
请帮忙

最佳答案

不建议将服务注入(inject)存储库,因为它会破坏关注点分离。相反,您应该使用调用存储库的服务类。根据您的评论,一个简单的工作流程如下所示:

  • 定义 UserService类,并将其注册为服务。
  • 注入(inject) security.context进入 UserService
  • 定义 UserService::getUsers() (或任何你想要的方法)。它在您将使用的方法中 security.context设置查询条件。您可以将条件直接传递给您的 UserRepository::getUsers()方法,或在 UserService 中构建 DQL对象并将其传递给 UserRepository .
  • UserService::getUsers()返回任何 UserRepository::getUsers()返回。

  • 这就是我喜欢处理此类情况的方式,但为了完整起见,您还可以在存储库中使用简单的 setter 注入(inject)。您将通过实体管理器(而不是从您的问题中的服务容器)获取存储库,然后只需调用 $userRepository->setSecurityContext($this->get('security.context')) .

    关于dependency-injection - 如何将服务注入(inject)实体存储库 Symfony2 原则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9128455/

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