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