在Symfony2服务中注入特定的Doctrine实体

时间:2014-05-02 13:45:33

标签: php symfony dependency-injection doctrine-orm

我目前正在服务中使用具有特定ID的实体。为了使用依赖注入来完成这项工作,我正在注入实体存储库和一个特定的ID。例如:

public function __construct($myRepo, $myId) {
    $this->myEntity = $myRepo->find($myId);
}

有没有办法在不传入存储库的情况下直接注入此特定实体?例如,理想的方法是:

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

我无法弄清楚如何定义执行此操作所需的服务。

2 个答案:

答案 0 :(得分:4)

服务应该是无国籍的。在服务中保存具有特定ID的用户会使其成为状态。

不是在构造函数中传递实体并将其保存在属性中,而是应将实体传递给调用的方法。例如。而不是传递给构造函数的to地址的邮件程序,它应该传递给mailer#mail()方法。

答案 1 :(得分:1)

@Wouter对服务无状态提出了一个很好的观点。但是,您可以使用DI工厂功能来实现目标:

specific_entity:
    class:  SomeEntity # Not used but you still need something here
    factory_service:  specific_entity_repository
    factory_method:   find
    arguments:  
        - 42

这将使用参数42调用存储库中的find方法。然后将注入返回的实体。我假设您已经知道如何将存储库设置为服务。