2012-04-20 27 views
5

używam Symfony2 i FOSUserBundlewysłać e-maila do kontrolera akcji Symfony2

muszę wysłać wiadomość e-mail przy użyciu SwiftMailer w mojej klasie mailera który nie jest kontrolerem lub jego działanie i pokazuję co mam zakodowane

<?php 

namespace Blogger\Util; 

use Symfony\Bundle\FrameworkBundle\Controller\Controller; 

class FlockMailer { 


    public function SendEmail(){ 
     $message = \Swift_Message::newInstance() 
     ->setSubject('Hello Email') 
     ->setFrom('[email protected]') 
     ->setTo('[email protected]') 
     ->setBody('testing email'); 

     $this->get('mailer')->send($message); 
    } 
} 

Ale otrzymuję następujący błąd

Fatal error: Call to undefined method Blogger\Util\FlockMailer::get() .... 

Czy każdy podmiot może mi to pomóc naprawdę mnie fustrating .....

+0

Nie rozumiem. Czy ten fragment kodu jest Twoim obecnym rozwiązaniem, ale chcesz przenieść adres e-mail w inne miejsce? Jeśli to prawda, prawdopodobnie powinieneś przeczytać o wstrzykiwaniu usług do twoich niestandardowych klas: http://stackoverflow.com/questions/6124444/how-can-i-access-a-service-outside-of-a- controller--- symfony2 – geca

+0

Użyłem FOSUserBundle i FOSFacebookbundle, co chcę, gdy użytkownik z powodzeniem loguje się z kontem na Facebooku Chcę wysłać e-mail do użytkownika z jego hasłem, aby mógł on zalogować się za pomocą tego hasła e-mail do tego muszę napisać funkcję w klasie dostawcy, aby wysłać e-mail .... –

Odpowiedz

1

Wystarczy zapomnieć o setter i getter:

$transport = \Swift_MailTransport::newInstance(); 
$mailer = \Swift_Mailer::newInstance($transport); 
$helper = new MailHelper($mailer); 
$helper->sendEmail($from, $to, $body,$subject); 

który pracował dla mnie z MailHelper wywoływana z metody detektora.

8

EDYCJA: ponieważ nie przetestowałem kodu, powinieneś także określić warstwę transportową, jeśli nie korzystasz z kontenera usług do pobrania instancji programu pocztowego. Spójrz na: http://swiftmailer.org/docs/sending.html

Robisz to źle. Zasadniczo potrzebujesz usługi , która nie jest klasą rozszerzającą Controller. To nie działa, ponieważ kontener usługi nie jest dostępny w funkcji SendMail().

Trzeba wstrzyknąć pojemnik serwisowy do własnego niestandardowego pomocnika w celu wysłania wiadomości e-mail. Kilka przykładów:

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); 
    } 
} 

użyć go w akcji kontrolera:

services: 
    mail_helper: 
     class:  namespace Blogger\Util\MailHelper 
     arguments: ['@mailer'] 

public function sendAction(/* params here */) 
{ 
    $this->get('mail_helper')->sendEmail($from, $to, $body); 
} 

Albo gdzie indziej bez dostępu do kontenera serwisowego:

class WhateverClass 
{ 

    public function whateverFunction() 
    { 
     $helper = new MailerHelper(new \Swift_Mailer); 
     $helper->sendEmail($from, $to, $body); 
    } 

} 

lub w służbie niestandardowego dostęp do kontenera:

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']] 
+0

Mam zaimplementowany bez dostępu do kontenera usługi po błędzie come ====== Catchable Fatal Error: Argument 1 przekazany do Swift_Mailer :: __ construct() musi być instancją Swift_Transport, none given, –

+0

@MuhammadUmair yes , musisz określić warstwę transportową. Nie testowałem kodu. Powinieneś wykonać http://symfony.com/doc/current/cookbook/email/email.html – gremo

+0

@MuhammadUmair również zajrzyj na http://swiftmailer.org/docs/sending.html – gremo

Powiązane problemy