2016-03-22 6 views
1

私はsymfony 2.8で作業しています。どこかで要求されていなくてもサービスをインスタンス化する必要がある状況に直面しています。Symfony2。サービスをインスタンス化するように強制する

なぜですか?このコアサービスは、コアに呼び出すメソッドによって転送されるタグ付きサービスを構成するため(コンパイラパスでこれを行いました)。 そして、リクエストされていないこれらのサービスの1つをリクエストCoreなしでリクエストすると、設定されずに使用できなくなります。

ここ

は、コンパイラのパスです:

$coreDefinition = $container->findDefinition(
    'app.improvements.core' 
); 

$taggedAppliers = $container->findTaggedServiceIds('app.improvement.applier'); 

foreach ($taggedAppliers as $id => $tags) { 
    $coreDefinition->addMethodCall(
     'registerApplier', 
     [new Reference($id)] 
    ); 
} 

$taggedImprovements = $container->findTaggedServiceIds(
    'app.improvement' 
); 

// Only method found to initialize improvements. 
foreach ($taggedImprovements as $id => $tags) { 
    $coreDefinition->addMethodCall(
     'registerImprovement', 
     [new Reference($id)] 
    ); 
} 

要約すると、プライヤーは改善を登録し、コアは、プライヤーを登録します。コアは、各アプリケーションがコアが格納する特定のアプライアに登録される必要があるため、アプリケーションとの関連を強化します。

私はApplierをリクエストするだけで、コアがインスタンス化されていないため、その改善は登録されません。

ありがとうございます。

+0

サービスをシングルトンにすることはできますか?そうであれば、カーネルイベントを介してインスタンス化し、他のオブジェクトによって後で呼び出されるように適切に設定することができます。 –

答えて

3

さらに、サービスをインスタンス化する最も簡単な方法は、an event listenerを使用することです。あなたのケースでは、kernel.requestを聞いて、あなたのサービスをコンテナから引き出すでしょう。

関連する問題