如何在symfony 2.6中使用另一个服务中的服务

6l7fqoea  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(123)

我在symfony 2.6中有一个名为ge_lib的服务设置,如下所示

ge_lib:
    class: GE\RestBundle\Services\GELib
    arguments: [@session, @doctrine.orm.entity_manager, @manage_ge_proc]

在GELib.php中,我需要使用另一个服务manage_ge_proc中的函数

manage_ge_proc:
    class: GE\RestBundle\Services\GEManageProcedure
    arguments: [@doctrine.orm.entity_manager, @manage_ge_native_query]

如果我尝试这样使用它,它就不起作用

$emailInv = $this->get('manage_ge_proc');
$sendStatus = $emailInv->pSendGeneralEmail(.....);

它给出错误消息,说找不到该名称的任何get函数。通常这个-〉$this->get('manage_ge_proc');在任何控制器中都可以工作。但是我如何在服务中使用它呢?
我尝试了$this->getContainer()->get('manage_ge_proc');,但没有效果。

pxq42qpu

pxq42qpu1#

此调用正在从DI容器中获取服务,而您的服务中没有该容器

$this->get('manage_ge_proc');

它在控制器中工作,因为DI容器被自动注入到那里。
因为services.yml中有这一行,它告诉Symfony将@manage_de_proc服务注入ge_lib构造函数

arguments: [@session, @doctrine.orm.entity_manager, @manage_ge_proc]

您应该能够从构造函数中选择@manage_ge_proc,如下所示:

public function __construct(
    Session $session,
    EntityManager $entityManager, 
    GEManageProcedure $manageGeProc
)
{
    //... whatever you do in your constructor
    $this->manageGeProc = $manageGeProc;
}

相关问题