2012-04-20 13 views
5

मैं Symfony2 और FOSUserBundleबाहर नियंत्रक कार्रवाई Symfony2

उपयोग कर रहा हूँ ईमेल भेजें मैं अपने मेलर कक्षा में SwiftMailer का उपयोग कर ईमेल भेजने के लिए जो एक नियंत्रक नहीं है या अपनी कार्रवाई मैं दिखा रहा मैं क्या कोडित किया है

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

लेकिन मैं निम्न त्रुटि

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

शरीर के किसी भी मुझे इस मदद कर सकते हैं हो रही है वास्तव में मुझे fustrating है .....

+0

मुझे यह नहीं मिला। क्या वह कोड स्निपेट आपके वर्तमान समाधान के रूप में है, लेकिन आप मेलिंग को कहीं और ले जाना चाहते हैं? यदि यह सही है, तो आपको शायद अपने कस्टम वर्गों में सेवाओं को इंजेक्शन देने के बारे में पढ़ना चाहिए: http://stackoverflow.com/questions/6124444/how-can-i-access-a-service-outside-of-a-controller-with- symfony2 – geca

+0

मैंने FOSUserBundle और FOSFacebookbundle का उपयोग किया है जो मैं चाहता हूं कि उपयोगकर्ता सफलतापूर्वक फेसबुक अकाउंट के साथ लॉगिन करे, मैं अपने पासवर्ड के साथ उपयोगकर्ता को ईमेल भेजना चाहता हूं ताकि वह उस ईमेल पासवर्ड से लॉगिन कर सके, मुझे ईमेल भेजने के लिए प्रदाता कक्षा में फ़ंक्शन लिखना है .... –

उत्तर

1

बस सेटर और गेटर के बारे में भूल:

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

कि MailHelper एक श्रोता विधि से कहा जाता है के साथ मेरे लिए काम किया।

8

EDIT: जैसा कि मैंने कोड का परीक्षण नहीं किया है, यदि आप मेलर का उदाहरण प्राप्त करने के लिए सेवा कंटेनर का उपयोग नहीं करते हैं तो आपको ट्रांसपोर्ट लेयर भी निर्दिष्ट करना चाहिए। देखें: http://swiftmailer.org/docs/sending.html

आप इसे गलत कर रहे हैं। आप मूल रूप से सेवा चाहते हैं, एक वर्ग नहीं जो Controller फैलाता है। यह काम नहीं कर रहा है क्योंकि सेवा कंटेनर SendMail() फ़ंक्शन में उपलब्ध नहीं है।

आपको ईमेल भेजने के लिए सेवा कंटेनर को अपने स्वयं के कस्टम सहायक में इंजेक्ट करना होगा। कुछ उदाहरण:

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

एक नियंत्रक कार्रवाई में इसका इस्तेमाल करने के लिए:

class WhateverClass 
{ 

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

} 

या एक कस्टम सेवा में:

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

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

या कहीं और सेवा कंटेनर पर नहीं जाता कंटेनर तक पहुंच:

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

त्रुटि के बाद मैंने सेवा कंटेनर तक पहुंच के बिना कार्यान्वित किया है ====== पकड़ने योग्य घातक त्रुटि: Swift_Mailer :: __ निर्माण() को पास किया गया तर्क 1 स्विफ्ट_Transport का एक उदाहरण होना चाहिए, कोई भी नहीं दिया गया, –

+0

@MuhammadUmair yes , आपको परिवहन परत निर्दिष्ट करना होगा। मैंने कोड का परीक्षण नहीं किया। आपको http://symfony.com/doc/current/cookbook/email/email.html – gremo

+0

@MuhammadUmair का भी पालन करना चाहिए http://swiftmailer.org/docs/sending.html – gremo

संबंधित मुद्दे