BEARBEITEN: Da ich den Code nicht getestet habe, sollten Sie auch die Transportschicht angeben, wenn Sie den Service-Container nicht zum Abrufen der Instanz des Mailers verwenden. Sehen Sie sich an: http://swiftmailer.org/docs/sending.html
Sie tun es falsch. Sie möchten grundsätzlich einen Service, keine Klasse, die Controller
erweitert. Es funktioniert nicht, weil der Service-Container in der Funktion SendMail()
nicht verfügbar ist.
Sie müssen den Service-Container in Ihre eigene benutzerdefinierte Helfer für das Senden von E-Mails injizieren. Einige Beispiele:
namespace Blogger\Util;
class MailHelper
{
protected $mailer;
public function __construct(\Swift_Mailer $mailer)
{
$this->mailer = $mailer;
}
public function sendEmail($from, $to, $body, $subject = '')
{
$message = \Swift_Message::newInstance()
->setSubject($subject)
->setFrom($from)
->setTo($to)
->setBody($body);
$this->mailer->send($message);
}
}
Um es in einer Controller-Aktion zu verwenden:
services:
mail_helper:
class: namespace Blogger\Util\MailHelper
arguments: ['@mailer']
public function sendAction(/* params here */)
{
$this->get('mail_helper')->sendEmail($from, $to, $body);
}
oder anderswo , ohne die Service-Container Zugriff:
class WhateverClass
{
public function whateverFunction()
{
$helper = new MailerHelper(new \Swift_Mailer);
$helper->sendEmail($from, $to, $body);
}
}
Oder in einem benutzerdefinierten Service Zugriff auf den Container:
namespace Acme\HelloBundle\Service;
class MyService
{
protected $container;
public function setContainer($container) { $this->container = $container; }
public function aFunction()
{
$helper = $this->container->get('mail_helper');
// Send email
}
}
services:
my_service:
class: namespace Acme\HelloBundle\Service\MyService
calls:
- [setContainer, ['@service_container']]
Ich verstehe es nicht. Ist das Code-Snippet Ihre aktuelle Lösung, aber Sie möchten das Mailing an einen anderen Ort verschieben? Wenn das korrekt ist, sollten Sie wahrscheinlich über das Einfügen von Diensten in Ihre benutzerdefinierten Klassen lesen: http://stackoverflow.com/questions/6124444/how-can-i-access-a-service-outside-of-a-controller-with- symfony2 – geca
Ich habe FOSUserBundle und FOSFacebookbundle verwendet, was ich will, wenn Benutzer erfolgreich mit Facebook-Konto anmelden Ich möchte E-Mail an den Benutzer mit seinem Passwort senden, damit er sich mit diesem E-Mail-Passwort anmelden kann ich Funktion in Provider-Klasse schreiben, um E-Mails zu senden .... –