0

特定の「レイアウト」(ヘッダー/フッター用) と特定のテンプレート (メールのメイン ビュー、2 列のレイアウトなど) を含むメールを送信しようとしています。

$mainViewHTMLには次のものがありますが、すべての変数を含むHTMLで<?= $this->content ?>ある必要がある場合、これは常にNULLです。$childView

これが私がMailService.phpファイルに持っているものです:

public function createMessage($to, $subject, $template, $variables) : Message
{
    // Create mail
    $message = new Message();

    // Create mail body
    $mainView   = new ViewModel();
    $mainView->setTerminal(true);
    $mainView->setTemplate('layout/mail.phtml');

    $childView  = new ViewModel();
    $childView->setTerminal(true);
    $childView->setTemplate($template);
    $childView->setVariables($variables);

    $mainView->addChild($childView, 'content');

    $msgRender  = $this->viewRenderer->render($mainView);

    $body = new Part($msgRender);
    $body->setType(Mime::TYPE_HTML);

    $messageBody = new MessageBody();
    $messageBody->addPart($body);
    $message->setBody($messageBody);

    $message->setTo($to);
    $message->setSubject($subject);

    return $message;
}

$this->viewRenderer工場で注入されます:

/** @var RendererInterface $viewRenderer */
$viewRenderer = $serviceLocator->get('viewrenderer');
4

1 に答える 1

1

わかりました!:) をレンダリングしてから、childViewこのレンダリングをビュー変数として設定する必要がありましたmainView

public function createMessage($to, $subject, $template, $variables) : Message
{
    // Create mail
    $message = new Message();

    // Create mail body
    $mainView   = new ViewModel();
    $mainView->setTerminal(true);
    $mainView->setTemplate('layout/mail.phtml');

    $childView  = new ViewModel();
    $childView->setTemplate($template);
    $childView->setVariables($variables);
    $childRender = $this->viewRenderer->render($childView); // render child

    $mainView->setVariable('content', $childRender); // set childRender to mainView

    $msgRender  = $this->viewRenderer->render($mainView);

    $body = new Part($msgRender);
    $body->setType(Mime::TYPE_HTML);

    $messageBody = new MessageBody();
    $messageBody->addPart($body);
    $message->setBody($messageBody);

    $message->setTo($to);
    $message->setSubject($subject);

    return $message;
}
于 2016-03-31T07:37:44.013 に答える