Dynamische Dienst-ID in einem Argument in symfony2?

8

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

    
user1826848 25.03.2013, 12:26
quelle

5 Antworten

16

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%     
Furgas 26.07.2013 17:37
quelle
1

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%     
Seer 25.03.2013 12:29
quelle
1

Sie können einen Parameter in Ihre Servicedefinition mit der Funktion parameter() einlesen und einen Service mit der Funktion service() erstellen. So können Sie einen dynamischen Service erstellen

In Ihrer Parameter.yml

%Vor%

In Ihrer services.yml

%Vor%     
Arno 12.07.2017 08:55
quelle
0

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%     
Peter Fox 01.04.2015 13:46
quelle
0

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.

    
Ulrich Eckhardt 14.10.2015 16:31
quelle

Tags und Links