我怎样才能将服务注入实体存储库Symfony2 doctrine?

EAd*_*del 5 dependency-injection symfony doctrine-orm

如何通过依赖注入将服务注入实体存储库?

我试着这样:

<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>
Run Code Online (Sandbox Code Playgroud)

但是setSecurityContext它从来没有被称为Plz帮助

Ste*_*nte 8

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

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

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