2013-02-25 3 views
5

Я работаю над приложением, которому необходимо отправить электронное сообщение после завершения процесса. Поскольку письмо должно быть HTML, я имел яркую идею представления представления как тела сообщения электронной почты, чтобы я мог реализовать функциональность «Нажмите здесь, чтобы увидеть это в своем браузере». Это все принимает участие в контроллере, который реализует AbstractRestfulController, поэтому сам вид находится в моем интерфейсном модуле, так что к нему можно получить доступ через URL-адрес через браузер. Однако я получаюКак визуализировать пользовательский вид с плагинами в Zend Framework 2

Нет RouteStackInterface экземпляра при условии

ошибки, когда я пытаюсь сделать вид.

Это мой код:

use Zend\View\HelperPluginManager; 
use Zend\View\Resolver; 
use Zend\View\Renderer\PhpRenderer; 

//Instantiate the renderer 
$renderer = new PhpRenderer(); 
$resolver = new Resolver\TemplateMapResolver(array(
      'layout' => realpath(__DIR__ . '/../../../../Application/view/layout/email.layout.phtml'), 
      'email/view' => realpath(__DIR__ . '/../../../../Application/view/application/email/view.phtml') 
     ) 
    ); 
$renderer->setResolver($resolver); 
$renderer->url()->setRouter($this->getEvent()->getRouter()); 

Я видел на документации API, который вы можете установить маршрутизатор к URL-плагин, придав ему RouteStackInterface, следовательно, в последней строке. Однако, похоже, это тоже не сработало.

Я хотел бы использовать тот же вид для отправки сообщения электронной почты HTML, которое содержит ссылки в теле сообщения & для отображения в браузере по URL-адресу.

Любые идеи/предложения относительно того, как это сделать?

EDIT/РЕШЕНИЕ:

Согласно ответу dotwired в поле ниже, получить экземпляр визуализатора от диспетчера службы приводит к тому, плагинам быть реализованы правильно. Так что это код, который работал:

module.config.php:

array('view_manager' => array(
      'template_map' => array(
        'layout/email'   => __DIR__ . '/../../Application/view/layout/email.layout.phtml', 
        'email/share'    => __DIR__ . '/../../Application/view/application/email/share.phtml', 
        'email/view'    => __DIR__ . '/../../Application/view/application/email/view.phtml', 
      ), 
    ), 
); 

REST контроллер:

use Zend\View\Model\ViewModel; 

//get the renderer 
    $renderer = $this->getServiceLocator()->get('Zend\View\Renderer\RendererInterface'); 

    //Create the views 
    $shareView = new ViewModel(array('data' => $data)); 
    $shareView->setTemplate('email/view'); 
    $emailLayout = new ViewModel(array('subject' => $this->_subject, 'content' => $renderer->render($shareView))); 
    $emailLayout->setTemplate('layout/email'); 

    //Render the message 
    $markup = $renderer->render($emailLayout); 

Используя рендерер от менеджера службы в $ this-> URL() просматривать работу помощника без проблем.

ответ

10

Просто используйте module.config.php вашего модуля, чтобы указать шаблон электронной почты, например:

'view_manager' => array(
    'template_path_stack' => array(
     'user' => __DIR__ . '/../view' 
    ), 
    'template_map' => array(
     'email/view' => __DIR__ . '/../view/application/email/view.phtml' 
    ) 
), 

После чего вы можете продолжать this part документации. Затем вы можете передать шаблон просмотра из рендеринга в MimePart, который будет использоваться MimeMessage, например,

$viewModel = new \Zend\View\Model\ViewModel(); 
$viewModel->setTemplate('email/view'); 

$renderer = $this->serviceLocator->get('Zend\View\Renderer\RendererInterface'); 
$htmlPart = new \Zend\Mime\Part($renderer->render($viewModel)); 
+0

Благодарим вас за это. Я попробую его в ближайшие пару дней и дам вам знать, если это сработает. К сожалению, приложение должно быть завтра, и нам придется отправить версию 1 с работой. – Adrian

+0

Сладкий, что сработало. Спасибо, поделился! – Adrian

+0

Добро пожаловать! :) –

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