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

时间:2012-02-03 12:09:48

标签: 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>

但是从未调用过setSecurityContext Plz帮助

1 个答案:

答案 0 :(得分:8)

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

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

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