2013-01-16 31 views
10

Ben UserManager uzanan bir hizmet var, bu yüzden ne zaman:enjekte SwiftMailer

Fatal error: Call to undefined method My\MyBundle\Service\ServiceClass::get() 

ben enjekte etmek gerekir çünkü bu olduğunu biliyorum:

$message = \Swift_Message::newInstance() 
      ->setSubject('~') 
      ->setFrom('~') 
      ->setTo('~') 
      ->setBody('~', 'text/html'); 
     $this->get('mailer')->send($message); 

hatası alıyorum buraya swiftmailer, ama nasıl? (genellikle hizmet sınıfı 'Genel' öğesini uzatır, böylece hızlı postalar dahil edilir.)

cevap

18

Kullandığınız hizmet türüne bağlı olarak, doğrudan sizin kullandığınız gibi hizmetinize enjekte etmeniz gerekir.

XML:

<services> 
     <service id="sample.service" class="%sample.service.class%"> 
      <argument type="service" id="mailer" /> 
     </service> 
</services> 

YAML: Sadece böyle Yapıcınızda hizmet yakalayabilir

services: 
    sample.service: 
     class:  %sample.service.class% 
     arguments: [@mailer] 

. Veya gerçekten isterseniz, service_container'u enjekte edebilirsiniz. Ama bu gerçekten kirli, ihtiyacın olan hizmetleri enjekte edebildiğin için. service_container Enjeksiyon, yalnızca dinamik bir servis çağrısına ihtiyacınız varsa gereklidir.

+0

Hizmeti .yml dosyasına ekledim, ancak sınıfın yapıcısında nasıl arayacağımı bilmiyorum. –

+2

Yapıcıya 'public function __construct ($ mailer)' gibi bir parametre ekleyin ve sonra ör. onu kurucu gövdesindeki özel bir mülke atayın. –

+1

a dummys kılavuzu: Hizmeti yukarıdaki yanıt olarak ekleyin. Daha sonra, yukarıdaki yorum üzerine yapıcıya ekleyin. daha sonra kurucuda '$ this-> mailer = $ mailer; Daha sonra şunları kullanabilirsiniz: $ this-> mailer-> send ($ message); ' –