2017-05-22 2 views
0

저는 PHP symfony2에서 새롭습니다. 나는 이메일을 보내기 위해 하나의 수업을 관리하고 싶다.클래스의 "renderView"라는 이름의 정의되지 않은 메소드를 호출하려고 시도했습니다.

services.yml :

mail_helper: 
     class: HelpBundle\MailSender\EmailManager 
     arguments: ['@mailer','@templating'] 

EmailManager :

class EmailManager 
{ 
protected $mailer; 
protected $templating; 

public function __construct(\Swift_Mailer $mailer,$templating) 
{ 
    $this->mailer = $mailer; 
    $this->templating = $templating; 
} 

public function sendEmail($fromEmail,$toEmail,$subject,$comments,$status) 
{ 
    $message = \Swift_Message::newInstance() 
     ->setSubject($subject) 
     ->setFrom($fromEmail) 
     ->setTo($toEmail) 
     ->setBody($this->templating->renderView('HelpBundle:Emails:add-comment.html.twig', array('comments' => $comments, 
      'status' => $status, 
      'subject' => $subject))) 
    ; 
    $this->mailer->send($message); 
    } 
} 

가 내 컨트롤러에서 나는 이렇게 불렀다 : 컨트롤러 액션이라고합니다

public newAction() 
{ 
$mailer = $this->get('mail_helper'); 
    $mailer->sendEmail($fromEmail,$toEmail,$subject,$comments,$ticketStatus); 
} 

오류는 다음과 같습니다

Attempted to call an undefined method named "renderView" of class "HelpBundle\MailSender\EmailManager".

어떻게 해결할 수 있는지 알고 싶습니다.

덕분에 당신은 services.yml의 사용 서비스에 템플릿을 수 있도록 주입해야 할 많은

답변

1

:

arguments: ["@mailer", "@templating"] 

을 다음 서비스를 사용

public function __construct(\Swift_Mailer $mailer, $templating) 
{ 
    $this->mailer = $mailer; 
    $this->templating = $templating; 
} 

public function sendEmail($fromEmail, $toEmail, $subject, $comments, $status) 
{ 
    $message = \Swift_Message::newInstance() 
     ->setSubject($subject) 
     ->setFrom($fromEmail) 
     ->setTo($toEmail) 
     ->setBody($this->templating->render(' 
       HelpBundle:Emails:add-comment.html.twig', 
       array('comments' => $comments, 
         'status' => $status, 
         'subject' => $subject 
       ) 
      ) 
     ); 
    $this->mailer->send($message); 
} 

그리고 renderView()가 컨트롤러 단축키이기 때문에 renderView()를 render()로 변경하십시오.

+0

사용법을 알려주십시오. 감사합니다 –

+0

나는 전체 코드로 답변을 편집했습니다 – Eimsas

+0

고마워. 이제 디폴트 컨트롤러에서 전자 메일을 보내기 위해 서비스를 요청합니다. 다음 오류 받기 : Catchable Fatal Error : Swift_Mailer :: newInstance()에 전달 된 인수 1은 Swift_Transport의 인스턴스 여야합니다. 아무 것도 지정되지 않고 C : \ Wamp \ www \ help \ src \ HelpBundle \ Controller \ DefaultController.php 온라인에 호출됩니다. 27이고 정의 된 코드는 다음과 같습니다./** @var EmailManager */ protected $ mailer; 공용 함수 __construct() { $ this-> mailer = new EmailManager (\ Swift_Mailer :: newInstance()); } –

관련 문제