2012-08-31 4 views
6

Ich würde gerne wissen, ob es eine Möglichkeit gibt, getaggte Dienste in Command zu finden.Symfony2 - Finde getaggte Dienste in Befehl

Ich habe einen Befehl, der ContainerAwareCommand erweitert, ich bin in der Lage, Container zu bekommen, aber ich möchte alle Dienste erhalten, die mit einem bestimmten Tag markiert ist. Zum Beispiel würde ich so etwas haben mag:

$this->getContainer()->findTaggedServiceIds('smtp.transport') 

Antwort

10

Stichwort Dienste sind nur zur Buildzeit der Dependency Injection Container, nicht zur Laufzeit zur Verfügung. Um also alle Dienste mit einem bestimmten Tag zu erhalten, müssen Sie einen Compiler-Pass erstellen, der eine Liste dieser Dienste speichert, die Sie später in Ihrem Befehl verwenden können. Dies alles wird in diesem Dokument beschrieben:

http://symfony.com/doc/current/components/dependency_injection/tags.html

+0

Ja, ich habe bereits einen Compiler Pass, den ich über $ hinzugefügt Container-> addCompilerPass() in meinem Bundle. Das Problem ist, dass ich keinen Weg finden konnte, den ContainerBuilder in Command zu bekommen, so dass ich addCompilerPass() aufrufen konnte. Hast du irgendeine Idee? – passkey1510

+0

Ah Ok, ich habe es. Ich habe mehrere Apps, die mehrere AppKernel haben, müssen nur die richtige App aufrufen, die das Bundle lädt. Vielen Dank. – passkey1510

+0

@ passkey1510 Sie können diese Antwort dann akzeptieren? :-) –

Verwandte Themen