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

how to use a service inside another service in symfony 2.6

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

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

inside 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'); 在任何 controller.But 中都有效 我如何在服务中使用它?

我试过$this->getContainer()->get('manage_ge_proc');但是没用。

此调用正在从 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_de_proc:

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