2

我试图在服务中调用从另一个服务调用另一个方法的方法。

当前类 -> 不同的类/服务 -> 到不同的类/服务

我可以成功调用初始服务,但是当该服务尝试调用其他服务时,我收到错误

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 控制器。它需要能够双向工作

4

2 回答 2

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

查看文档中的参考服务章节。

编辑:我认为不可能同时使用同一个类作为服务和控制器。我建议将控制器定义为服务。最后,您会将第二个服务注入您的第一个服务,并将您的第一个服务注入您的控制器服务(总共三个服务)。

于 2012-10-30T02:50:44.900 回答
0

自 2017 年和 Symfony 3.3 以来,这变得非常简单。

1. 使用自动装配注册服务

# app/config/services.yml
services:
    _defaults:
        autowire: true

    EndorseMe\EndorsementBundle\:
        resource: ../../src/EndorseMe/EndorsementBundle

2.通过构造函数注入要求任何其他服务中的任何服务

<?php

namespace EndorseMe\EndorsementBundle;

class MyService
{
    /**
     * @var AnotherService 
     */
    private $anotherService;

    public function __construct(AnotherService $anotherService)
    {
        $this->anotherService = $anotherService;
    }

    public function someMethod()
    {
        $this->anotherService->someAnotherMethod();
    }
}

就这样!


要在之前/之后获得更多 Symfony 3.3 依赖注入新闻示例,只需查看这篇文章

于 2017-10-21T19:43:20.823 回答