Я работаю над приложением, которому необходимо отправить электронное сообщение после завершения процесса. Поскольку письмо должно быть 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() просматривать работу помощника без проблем.
Благодарим вас за это. Я попробую его в ближайшие пару дней и дам вам знать, если это сработает. К сожалению, приложение должно быть завтра, и нам придется отправить версию 1 с работой. – Adrian
Сладкий, что сработало. Спасибо, поделился! – Adrian
Добро пожаловать! :) –