2016-03-30 21 views
0

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

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

私は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'); 
+0

のビュー変数としてレンダリング設定レンダリングしなければならなかった、私はちょうど私の作業のコードをチェックし、私はそれでchildViewを使用していない実感します! !!ごめんなさい! (ZF2はとても難しいですが、このような問題が発生すると、なぜMeteorのためにダンプしたのか覚えています!) –

答えて

0

[OK]を、私はそれが働いてしまいました! :)私は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; 
} 
+0

3分遅れて申し訳ありませんが、そのパターンと合致しているからです。私はそれをテストしたとき、私は実際にエラーが発生しました。エラー報告のいくつかをオフにしましたか? – KatsuoRyuu

+0

ええと、私はデフォルトのエラー報告をしていると思いますが、私は何かエラーが発生したかどうか試してみることができますが、私にとってはうまくいくと思います。 – dan2k3k4

関連する問題