2016-03-30 2 views
0

Я пытаюсь отправить электронное письмо с конкретным «макетом» (для заголовка/нижнего колонтитула) с определенным шаблоном (основной вид электронной почты, например, расположение в 2 столбца и т. Д.).Изящный вид с детским видом?

$mainView html имеет: <?= $this->content ?>, но это всегда NULL, когда он должен быть $childView html со всеми переменными.

Вот что я имею в 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 впрыскивается в Factory:

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

Я хотел бы помочь, я только что проверил мои рабочие коды, и я понимаю, что я не использую childView в нем! !! Сожалею! (ZF2 так тяжело, это настоящая боль! Всякий раз, когда я вижу такую ​​проблему, я помню, почему я сбрасываю ее для Метеор! Истинная история!) –

ответ

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

Хмм, я думаю, что у меня есть сообщение об ошибках по умолчанию, я могу попытаться посмотреть, есть ли у меня какие-либо ошибки, но я знаю, что это работает для меня: s – dan2k3k4

Смежные вопросы