2015-07-09 12 views
6

Ich habe einen Dienst, der eine Schließung erfordert, wenn er versucht, es mithilfe von Anrufen einzurichten: in Symfony DI YAML-Datei.Symfony DependencyInjection: Wie kann Closure in YAML-Servicedefinitionen dargestellt werden?

Illuminate\Queue\QueueManager: 
    arguments: 
    app: "@app" 
    calls: 
    - [ addConnector, [ "@Illuminate\\Queue\Connector\NullConnector" ]] 

Ich frage mich, ob ich einen Dienst in einem Verschluss umschließen kann, da der Code-Bibliothek lässt mich nicht etwas anderes einfügen.

public function addConnector($driver, Closure $resolver) 
{ 
    $this->connectors[$driver] = $resolver; 
} 

Gibt es eine Möglichkeit, ich Schließung schaffen kann (oder eine anonyme Funktion) in Symfony DI-Container YAML-Definitionsdatei? Ich denke, es könnte mit einem Compiler-Pass gemacht werden, aber ich frage mich, ob es möglicherweise eine bestehende Lösung für dieses Problem gibt.

Antwort

5

Sie haben das wahrscheinlich schon gelöst. Aber Sie können eine Fabrik erstellen, die einen Verschluss

some_callback: 
    public: false 
    class: callback 
    factory: [SomeClass\Factory, create] 

kehrt Und man kann das passieren zum addConnector Aufruf:

Illuminate\Queue\QueueManager: 
    arguments: 
    app: "@app" 
    calls: 
    - [ addConnector, ["@Illuminate\\Queue\Connector\NullConnector", "@some_callback"]] 
Verwandte Themen