【问题标题】:how to render an emailbody如何呈现电子邮件正文
【发布时间】:2019-12-31 10:56:53
【问题描述】:

我想使用视图作为电子邮件正文。

我试过这个:

    $renderer = new PhpRenderer();

    $bodyHtml = $renderer->render(
        '/user/email/reset-password-email',
        [
            'passwordResetUrl' => $passwordResetUrl,
        ]);

    $html = new MimePart($bodyHtml);

我收到以下错误:

无法呈现模板“/user/email/reset-password-email”;解析器无法解析到文件

我的视图模板位于:

任何帮助表示赞赏。

【问题讨论】:

    标签: zend-framework3 zend-view zend-mail


    【解决方案1】:

    要将视图渲染为字符串,您需要一个渲染器“ViewRenderer”。

    如果你能得到ServiceManager, 那么,

    $renderer = $serviceManager->get('ViewRenderer');
    

    现在,

     $bodyHtml = $renderer->render(
            '/user/email/reset-password-email',
            [
                'passwordResetUrl' => $passwordResetUrl,
            ]);
    
        $html = new MimePart($bodyHtml);
    

    【讨论】:

      【解决方案2】:

      您需要从工厂的服务定位器中检索渲染器,而不是直接在您使用它的类中实例化它。

      电子邮件发件人类工厂

      class EmailSenderFactory {
          public function __invoke($services) {
              $viewRenderer = $services->get('ViewRenderer');
              return new EmailSender($viewRenderer);
          }
      }
      

      电子邮件发件人类别

      class EmailSender {
      
          private $viewRenderer;
      
          public function __construct($viewRenderer) {
              $this->viewRenderer = $viewRenderer;
          }
      
          public function createEmail() {
              $template = '/user/email/reset-password-email';
              $variables = ['passwordResetUrl' => $passwordResetUrl];
              $bodyHtml = $renderer->render($template, $variables);
              $html = new MimePart($bodyHtml);
          }
      }
      

      我遇到了同样的问题(发送电子邮件重置密码),我通过这种方式解决了。希望这会对你有所帮助:)

      【讨论】:

      • 我还没有尝试过使用工厂类,所以我不知道在哪里可以找到这些类。
      • 好吧,这在 SO 中解释起来有点太复杂了。我建议你看看 Zend 的基础教程:docs.zendframework.com/tutorials/getting-started/overview。在Database and Models 章节中,它谈到了工厂以及如何使用它们。 ;)
      猜你喜欢
      • 2018-04-18
      • 2020-08-01
      • 2011-10-28
      • 1970-01-01
      • 1970-01-01
      • 2015-03-30
      • 2022-01-24
      • 1970-01-01
      • 2017-01-16
      相关资源
      最近更新 更多