【问题标题】:Attempted to call an undefined method named "renderView" of class试图调用类的名为“renderView”的未定义方法
【发布时间】:2017-05-22 11:35:59
【问题描述】:

我是 php symfony2 的新手。我想管理一个类来发送电子邮件。

services.yml:

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

电子邮件管理器:

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

接下来调用控制器动作时出错:

试图调用“HelpBundle\MailSender\EmailManager”类的名为“renderView”的未定义方法。

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

非常感谢

【问题讨论】:

    标签: php symfony swiftmailer


    【解决方案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()改为render(),因为renderView()是控制器的快捷方式

    【讨论】:

    • 能帮我看看怎么用吗?谢谢
    • 谢谢。现在在我正在调用服务发送电子邮件的默认控制器上。出现下一个错误:可捕获的致命错误:传递给 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()); }
    • 您以错误的方式使用服务。阅读手册如何使用服务:symfony.com/doc/current/service_container.html
    • 嗨@Eimsa,我读了那个文件。基于此和您的示例,我尝试管理我的代码,但仍然有错误。我现在在哪里犯错了?
    • 我写的代码是一个服务,你必须在控制器或其他你需要的地方调用它。在控制器中,您可以这样称呼它 $service = $this->get('mail_helper');然后调用发送电子邮件: $service->sendEmail(params);将 params 更改为您传递给 sendEmail 方法的参数。
    猜你喜欢
    • 2018-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-27
    • 2015-12-20
    • 2018-12-15
    相关资源
    最近更新 更多