Ist es möglich, die Service-ID in einem Argument dynamisch zu setzen (z. B. wie ein Klassenname, der über Parameter gesetzt werden kann) in Symfony 2 (xml configs)?
Folgendes funktioniert nicht
%Vor%Die Idee besteht darin, den Parameter% dynamic_service_name% dynamisch auf "service1" oder "service2" zu setzen, so dass die benötigte Instanz / das gewünschte Objekt an die myservice-Klasse übergeben wird, z. in der Extension :: load () über $ container- & gt; setParameter ('dynamic_service_name', 'service1');
Vielen Dank
Sie können CompilerPass verwenden:
%Vor%und füge es deiner Bundle-Klasse hinzu:
%Vor%FOLGE NACH :
Seit Symfony 2.4 können Sie Expression Language wie folgt verwenden:
%Vor%Direkt aus der symfony2 docs;)
%Vor%Ist das, wonach Sie suchen?
Bearbeiten:
Dies ist einer meiner Dienste, der einen Parameter verwendet. Es ist jedoch in YAML. Das funktioniert gut. Wie Sie sehen können, verwendet es den Klassennamen mit dem Namensraum der Klasse im Parameter.
%Vor%Dies ist ungefähr so, wie es möglich ist, den Container selbst als Fabrik zu verwenden. Sie können dann Ihren 'dynamic_service_name' entweder als service1 oder service2 definieren und er wird in diesem Service geladen. (XML für eine Factory ist in 2.6 etwas anders, sollte aber trotzdem gleich funktionieren)
%Vor%Zu Peter Fox 'Antwort hinzufügen, hier ist das Äquivalent in YAML:
%Vor% Es gibt zwei kleine Unterschiede in der Art, wie die Klassen der beiden Dienste spezifiziert sind. Ich bin nicht vertraut mit der Verwendung von Dateinamen als Klassen und foobar\service1
ist auch nicht PSR-konform, also habe ich diese ersetzt.