我试图调用从另一个服务调用ANOTHER方法的服务中的方法。
当前课程 - >不同的课程/服务 - >到不同的班级/服务
我可以成功调用初始服务,但是当该服务尝试调用其他服务时,我会收到错误
Fatal error</b>: Call to a member function get() on a non-object
导致错误的代码:
$edmt = $this->get('endorsements');
服务声明:
endorsements:
class: EndorseMe\EndorsementBundle\Controller\DefaultController
arguments: [ @router, @service_container]
然而,为了使事情更棘手,这项服务并不总是用作服务。它也是常规的symfony控制器。它需要能够双向工作
答案 0 :(得分:3)
您应该将第二项服务作为参数传递给您的第一项服务:
endorsements:
class: EndorseMe\EndorsementBundle\Controller\DefaultController
arguments: [ @router, @service_container, @your_second_service ]
然后在你的第一次服务中:
protected $injectedService;
public function __construct(SecondServiceClass $injectedService)
{
$this->injectedService = $injectedService;
}
之后,您应该可以通过调用$this->injectedService
请查看文档中的Referencing Services章节。
编辑:我认为不可能将同一个类用作服务和控制器。我建议改为define Controller as Service。最后,您将在第一个服务中注入第二个服务,并在控制器服务中注入您的第一个服务(总共三个服务)。
答案 1 :(得分:0)
自2017年起和Symfony 3.3 ,这变得非常简单。
# app/config/services.yml
services:
_defaults:
autowire: true
EndorseMe\EndorsementBundle\:
resource: ../../src/EndorseMe/EndorsementBundle
<?php
namespace EndorseMe\EndorsementBundle;
class MyService
{
/**
* @var AnotherService
*/
private $anotherService;
public function __construct(AnotherService $anotherService)
{
$this->anotherService = $anotherService;
}
public function someMethod()
{
$this->anotherService->someAnotherMethod();
}
}
这就是全部!
在just check this post之前/之后获取更多Symfony 3.3依赖注入新闻示例。