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

2番目のサービスを最初のサービスにパラメーターとして渡す必要があります。

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

ドキュメントの参照サービスの章をご覧ください。

編集:サービスとコントローラーの両方として同じクラスを使用することは不可能だと思います。代わりに、コントローラーをサービスとして定義することをお勧めします。最終的に、2番目のサービスが最初のサービスに注入され、最初のサービスがコントローラーサービスに注入されます(合計3つのサービス)。

于 2012-10-30T02:50:44.900 に答える