2017-05-22 40 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".

我想了解我如何解决这个问题?

非常感谢

回答

1

你必须注入到您的服务模板,以便在services.yml使用:

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()是控制器快捷方式

+0

可以帮助我如何使用它吗?谢谢 –

+0

我已经使用完整代码编辑答案 – Eimsas

+0

谢谢。现在在默认的控制器上,我打电话给服务发送电子邮件。获取下一个错误:可捕获的致命错误:传递给Swift_Mailer :: newInstance()的参数1必须是Swift_Transport的一个实例,没有给出,在C:\ wamp \ www \ help \ src \ HelpBundle \ Controller \ DefaultController.php中调用27和定义 代码是:/ ** @var EmailManager */ protected $ mailer; public function __construct() {this-> mailer = new EmailManager(\ Swift_Mailer :: newInstance()); } –

相关问题