我有条令控制台的问题。我有一个MailServiceFactory.php,其中包含以下代码:
namespace Application'Service;
use Zend'ServiceManager'FactoryInterface;
use Zend'ServiceManager'ServiceLocatorInterface;
class MailServiceFactory implements FactoryInterface
{
public function createService(ServiceLocatorInterface $serviceLocator)
{
$I_render = $serviceLocator->get('ViewRenderer');
$a_config = $serviceLocator->get('config');
return new MailService($I_render, $a_config);
}
}
use Zend'ServiceManager'FactoryInterface;
use Zend'ServiceManager'ServiceLocatorInterface;
class MailServiceFactory implements FactoryInterface
{
public function createService(ServiceLocatorInterface $serviceLocator)
{
$I_render = $serviceLocator->get('ViewRenderer');
$a_config = $serviceLocator->get('config');
return new MailService($I_render, $a_config);
}
}
所有功能都能工作,但当我执行vendor/bin/doctirne-module
时,我会得到以下错误:
致命错误:未捕获异常带有消息的"Zend''ServiceManager''Exception''ServiceNotFoundException"'Zend''ServiceManager''ServiceManager::get无法获取或创建中ViewRenderer的实例/Users/Daniele/Apps/coradini.com/www/vendor/zendframework/zendfframework/library/Zend/ServiceManager/ServiceManager.php:529
为什么我会出现这个错误?
您不能在控制台请求上直接从ServiceLocator
获取ViewRenderer
,因为它不在阶段中,因为请求不是HttpRequest
。
您可以很容易地尝试将PhpRenderer
实例传递给您的服务,并使用它来呈现ViewModel
,而不是ViewRenderer
。例如:
use Zend'View'Renderer'PhpRenderer;
class MailServiceFactory implements FactoryInterface
{
public function createService(ServiceLocatorInterface $serviceLocator)
{
$renderer = new PhpRenderer();
$a_config = $serviceLocator->get('config');
return new MailService($renderer, $a_config);
}
现在在您的邮件服务:
use Zend'View'Renderer'RendererInterface;
use Zend'View'Model'ViewModel;
class MailService
{
protected $renderer;
public function __construct(RendererInterface $renderer, $config)
{
$this->renderer = $renderer;
// set your config etc..
}
public function fooMethod()
{
$model = new ViewModel();
$model->setTemplate('path/to/template.phtml');
$result = $this->renderer->render($model);
// The $result contains rendered html markup
}
希望能有所帮助。
感谢foozy now条令控制台功能!但我无法阅读渲染邮件的临时模板。
My tempate is locatend in module/Application/view/email/template.phtml
在我的module.config.php中有一个配置:
'template_path_stack' => array(
'application' => __DIR__ . '/../view',
),
错误:
Zend'View'Renderer'PhpRenderer::render: Unable to render template "email/template.phtml"; resolver could not resolve to a file
哪里错了?
感谢
在控制台配置中添加了view_manager配置后,我也遇到了同样的问题。解决方案是从ViewManager:中提取渲染器
$renderer = $serviceLocator->get('ViewManager')->getRenderer();
这也将注册ViewRenderer服务,因此在此之后对get('ViewRenderer')
的任何调用都应该可以工作。
在ZF3中,TemplateMapResolver也可以帮助您解决一些问题,如:"PhpRenderer::render:无法渲染模板"
$resolver = new 'Zend'View'Resolver'TemplateMapResolver();
$resolver->setMap([
'mailTemplate' => __DIR__ . '/../../view/email/testmail.phtml'
]);
$renderer->setResolver($resolver);
$viewContent = new 'Zend'View'Model'ViewModel($contentArray);
$viewContent->setTemplate('mailTemplate');