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

时间:2017-11-17 11:02:58

标签: php symfony symfony-2.6

我在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');,但它没有用。

1 个答案:

答案 0 :(得分:5)

此调用是从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;
}