2012-04-20 19 views
5

Sto usando Symfony2 e FOSUserBundleSend Email Fuori Action Controller Symfony2

devo inviare e-mail utilizzando SwiftMailer nella mia classe mailer, che non è un controller o la sua azione sto mostrando quello che ho codificato

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

Ma sto ottenendo il seguente errore

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

qualsiasi organismo può aiutare me questo è veramente mi fustrating .....

+0

Non capisco. Questo frammento di codice è inteso come la tua attuale soluzione, ma ti piacerebbe spostare la posta in qualche altro posto? Se è corretto, probabilmente dovresti leggere i servizi di iniezione nei tuoi corsi personalizzati: http://stackoverflow.com/questions/6124444/how-can-i-access-a-service-outside-of-a-controller-with- symfony2 – geca

+0

Ho usato FOSUserBundle e FOSFacebookbundle quello che voglio quando l'utente accede con successo con l'account facebook Voglio mandare e-mail all'utente con la sua password in modo che possa accedere con quella password e-mail per questo devo scrivere nella classe provider per inviare e-mail .... –

risposta

1

solo dimenticare il setter e getter:

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

che ha funzionato per me con la MailHelper chiamato da un metodo listener.

8

EDIT: poiché non ho testato il codice, è necessario specificare il livello di trasporto se non si utilizza il contenitore di servizi per ottenere l'istanza del mailer. Guarda: http://swiftmailer.org/docs/sending.html

Stai sbagliando. Fondamentalmente vuoi un servizio , non una classe che si estende Controller. Non funziona perché il contenitore di servizi non è disponibile nella funzione SendMail().

È necessario inserire il contenitore di servizi nel proprio helper personalizzato per l'invio di e-mail. Alcuni esempi:

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

di usarlo in un'azione regolatore:

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

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

o altrove senza accedere al contenitore di servizi:

class WhateverClass 
{ 

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

} 

O in un servizio personalizzato accesso al contenitore:

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

Ho implementato senza accedere al contenitore del servizio dopo errore venire ====== Errore irreversibile Catchable: l'argomento 1 passato a Swift_Mailer :: __ construct() deve essere un'istanza di Swift_Transport, nessuna data, –

+0

@MuhammadUmair si , devi specificare il livello di trasporto. Non ho testato il codice. Dovresti seguire http://symfony.com/doc/current/cookbook/email/email.html – gremo

+0

@MuhammadUmair anche dare un'occhiata a http://swiftmailer.org/docs/sending.html – gremo

Problemi correlati