2013-01-16 4 views
10

나는 UserManager를 확장하는 서비스를, 그래서 내가 할 때를 주입 SwiftMailer

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

나는 내가 주입해야하기 때문에이 알고 :

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

나는 오류를 얻을 여기로 swiftmailer하지만, 어떻게? (일반적으로 서비스 클래스가 'Generic'을 확장하므로 빠른 메일러가 포함됩니다.)

답변

18

사용중인 서비스 파일의 종류에 따라 직접 말한 것처럼 서비스에 직접 주입해야합니다.

XML :

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

YAML : 당신은 단순히이 같은 생성자의 서비스를 잡을 수

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

. 정말로 원한다면 service_container을 주사 할 수 있습니다. 그러나 그것은 정말로 더러운 것입니다. 필요한 서비스를 주입 할 수 있기 때문입니다.

다이내믹 서비스 호출이 필요한 경우에만 service_container을 주입하십시오.

+0

.yml 파일에 서비스를 추가했지만 클래스의 생성자에서이를 호출하는 방법을 모르겠습니다. –

+2

'public function __construct ($ mailer)'와 같이 생성자에 매개 변수를 추가하기 만하면됩니다. 그것을 생성자 본문의 전용 속성에 할당합니다. –

+1

a dummys guide : 서비스를 위의 대답으로 추가하십시오. 그런 다음 위의 설명과 같이 생성자에 추가합니다. 그런 다음 생성자에'$ this-> mailer = $ mailer; '를 추가하십시오. 다음과 같이 쓸 수 있습니다 :'$ this-> mailer-> send ($ message);' –