2016-07-20 17 views
0

Ich habe ein Symfony 2.8-Projekt, das die Verwendung von zwei separaten Mailing-Diensten erfordert (z. B. Google SMTP und Yahoo SMTP). Ich habe sie so konfiguriert nach den docs:Wie injiziere ich verschiedene SwiftMailer-Mailer in verschiedene Dienste in Symfony?

swiftmailer: 
    default_mailer: mailer_google 
    mailers: 
     mailer_google: 
      transport: smtp 
      host: %mailer_google_host% 
      port: %mailer_google_port% 
      encryption: tls 
      username: %mailer_google_username% 
      password: %mailer_google_password% 
     mailer_yahoo: 
      transport: smtp 
      host: %mailer_yahoo_host% 
      port: %mailer_yahoo_port% 
      encryption: tls 
      username: %mailer_yahoo_username% 
      password: %mailer_yahoo_password% 

Die Werte für die %variables% sind alle definiert in parameters.yml, die hier nicht relevant sind.

Ich versuche, eine benutzerdefinierte Mailer-Klasse zu verwenden, die zwei verschiedene Dienste verwendet wird, zu definieren, wie folgt aus:

aalaap.services.mailer_google: 
    class: Aalaap\AppBundle\Services\Mail\Mailer 
    arguments: 
     - @mailer 
     - '%mailer_google_sender%' 

aalaap.services.mailer_yahoo: 
    class: Aalaap\AppBundle\Services\Mail\Mailer 
    arguments: 
     - @mailer_yahoo 
     - '%mailer_yahoo_sender%' 

Jetzt, da die Standard-Mailer mailer_google, in der ersten Service-Definition festgelegt ist , nur die Angabe @mailer funktioniert gut. Der zweite Dienst kann @mailer_yahoo jedoch nicht finden.

ServiceNotFoundException CheckExceptionOnInvalidReferenceBehaviorPass.php in Leitung 58: Der Dienst "aalaap.services.mailer_yahoo" hat eine Abhängigkeit von einem nicht existierenden Service "mailer_yahoo".

Ich habe es mit @mailer.mailer_yahoo versucht, aber das funktioniert auch nicht. Wenn ich die erste Dienstdefinition so ändere, dass die spezifische @mailer_google statt nur der Standard @mailer verwendet wird, funktioniert das auch nicht. Kein Glück mit @swiftmailer.mailers.mailer_yahoo.

Wie injiziere ich den zweiten (oder nicht standardmäßigen) Mailer in einen Dienst?

+0

Ich denke, der primäre Service ist 'swiftmailer'. Versuchen Sie, diesen Befehl in der Konsole auszuführen und prüfen Sie, welche Dienstoptionen Sie aus dem Container haben. 'php bin/console debug: swiftmailer' – Jeet

+1

Haben Sie versucht @ swiftmailer.mailer.mailer_yahoo (nicht @ swiftmailer.mailers.mailer_yahoo)? –

+0

@UgoT. Ich habe das gerade herausgefunden, nachdem ich die Frage gepostet hatte! Fast immer finde ich die Antwort selbst heraus, nachdem ich auf dieser Seite Fragen gestellt habe. Wie auch immer - wenn du das als Antwort postest, werde ich es akzeptieren! – aalaap

Antwort

2

Also, das ist, wie die Einrichtung mehr Mailer Konten und mit Symfony Injektion behandeln:

-Setup der Swiftmailer config:

swiftmailer: 
    default_mailer: mailer_google 
    mailers: 
     mailer_google: 
      transport: smtp 
      host: %mailer_google_host% 
      port: %mailer_google_port% 
      encryption: tls 
      username: %mailer_google_username% 
      password: %mailer_google_password% 
     mailer_yahoo: 
      transport: smtp 
      host: %mailer_yahoo_host% 
      port: %mailer_yahoo_port% 
      encryption: tls 
      username: %mailer_yahoo_username% 
      password: %mailer_yahoo_password% 

Dann die gewünschte Mailer injiziert (zB Mailer google) in Dienstleistungen auf diese Weise:

aalaap.services.mailer_google: 
    class: Aalaap\AppBundle\Services\Mail\Mailer 
    arguments: 
     - @swiftmailer.mailer.mailer_google 
     - '%mailer_google_sender%' 

Or (weil in diesem Fall google Mailer ist das Standard-Mailer):

aalaap.services.mailer_google: 
    class: Aalaap\AppBundle\Services\Mail\Mailer 
    arguments: 
     - @swiftmailer.mailer.default_mailer 
     - '%mailer_google_sender%'