我尝试创建一个通过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
) );
当我从网络浏览器运行时,每件事都会运行。但是当我从控制台运行时,我收到了错误。 感谢。
答案 0 :(得分:2)
您需要在控制台操作中添加一个php渲染器,因为您没有显示html内容,而是使用默认情况下无法执行此操作的cli。
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));
答案 1 :(得分:0)
在我的情况下,我试图通过控制台发送电子邮件并收到以下错误:
======================================================================
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
这是因为我在 module / MyModuleName / view / email 中将 .phtml 文件设置为模板,并且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));