Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Symfony2服务中注入特定的条令实体_Php_Symfony_Dependency Injection_Doctrine Orm - Fatal编程技术网

Php 在Symfony2服务中注入特定的条令实体

Php 在Symfony2服务中注入特定的条令实体,php,symfony,dependency-injection,doctrine-orm,Php,Symfony,Dependency Injection,Doctrine Orm,我当前正在服务中使用具有特定ID的实体。为了使用依赖项注入实现这一点,我正在注入实体存储库和特定ID。例如: public function __construct($myRepo, $myId) { $this->myEntity = $myRepo->find($myId); } 有没有一种方法可以直接注入这个特定的实体而不传入存储库?例如,理想的方法是: public function __construct($myEntity) { $this->my

我当前正在服务中使用具有特定ID的实体。为了使用依赖项注入实现这一点,我正在注入实体存储库和特定ID。例如:

public function __construct($myRepo, $myId) {
    $this->myEntity = $myRepo->find($myId);
}
有没有一种方法可以直接注入这个特定的实体而不传入存储库?例如,理想的方法是:

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

我不知道如何定义执行此操作所需的服务。

服务应该是无状态的。在服务中保存具有特定id的用户会使其处于状态


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

服务应是无状态的。在服务中保存具有特定id的用户会使其处于状态


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

@Wouter很好地说明了服务是无状态的。但是,您可以使用DI factory功能来实现您的目标:

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

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

@Wouter很好地说明了服务是无状态的。但是,您可以使用DI factory功能来实现您的目标:

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

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

非常好,让它们保持无状态是有意义的。但是,我不确定如何将我需要的特定实体注入到使用它的方法中,因为它是一个受保护的方法。。。把它传给那个地方我想我没跟着你。该方法是从服务内部调用的,因此为了将其传递给该方法,服务需要了解它。非常好,保持它们无状态是有意义的。但是,我不确定如何将我需要的特定实体注入到使用它的方法中,因为它是一个受保护的方法。。。把它传给那个地方我想我没跟着你。该方法是从服务内部调用的,因此为了将其传递给该方法,服务需要了解它。