如何通过依赖注入将服务注入实体存储库?
我试着这样:
<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帮助
答案 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'))
。