Не удается получить экземпляр ViewRenderer из ServiceLocator в запросе консоли


Я пытаюсь создать функцию для отправки электронной почты через consoleRequest. Настройка с помощью crontab. Я получил эту ошибку

Zend\ServiceManager\Exception\ServiceNotFoundException: 
Zend\ServiceManager\ServiceManager::get was unable to fetch or create an instance for ViewRenderer

Когда я запускаю с консоли.

$renderer = $this->getServiceLocator()->get('ViewRenderer');
$content = $renderer->render ( 'admin/email/tmpl/jobinfo', array (
            "jobs" => $recruitingData 
    ) );

Все запускается, когда я запускаю из веб-браузера. Но я получил ошибку при запуске с консоли. Спасибо.

Author: edigu, 2014-05-28

2 answers

Вам нужно будет добавить средство визуализации php в действие консоли, так как вы не отображаете содержимое html, но используете интерфейс командной строки, который по умолчанию не может этого сделать.

use Zend\View\Model\ViewModel;
use Zend\View\Renderer\PhpRenderer;
....

$renderer = new PhpRenderer();

Теперь добавьте представление, которое вы хотите отобразить.

$template = 'path/to/template/';
$model = new ViewModel();
$model->setTemplate($template);

В конце всего этого просто сохраните результат рендеринга и передайте его в свою почтовую функцию/службу/что угодно.

$yourMailService->whateverMethodYouUseToSetContent($renderer->render($model));
 2
Author: cptnk, 2014-05-28 09:36:18

В моем случае я пытался отправлять электронные письма через консоль и получал следующую ошибку:

======================================================================
The application has thrown an exception!
======================================================================
Zend\View\Exception\RuntimeException
Zend\View\Renderer\PhpRenderer::render: Unable to render template "email/welcome.phtml"; resolver could not resolve to a file

Это потому, что я устанавливал в качестве шаблона файл .phtml внутри файла module/mymodulename/view/email, и PHPRENDERER не знает этого пути.

Для устранения этой ошибки необходимо зарегистрировать новый распознаватель и задать его путь.

use Zend\View\Resolver\TemplatePathStack;

...

// defining the resolver
$resolver = new TemplatePathStack();
$resolver->addPath('full/path/to/view/in/module');

// create a PhpRenderer
$renderer = new PhpRenderer();

// Set the resolver to renderer
$renderer->setResolver($resolver);

// create the ViewModel
$model = new ViewModel();

// And set the template to use
$model->setTemplate('some-template.phtml');

// Finally use it (get example from cptnk in previous answer)
$yourMailService->whateverMethodYouUseToSetContent($renderer->render($model));  
 0
Author: Andre Cardoso, 2016-02-06 02:31:39