Ошибка консоли ZF2 — Get не удалось получить или создать экземпляр для ViewRenderer

У меня проблема с доктриной консоли. У меня есть 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/corradini.com/www/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php:529

Почему я получаю эту ошибку?

0

Решение

Вы не можете получить ViewRenderer прямо из ServiceLocator на консольных запросах, потому что это не в стадии, так как запрос не является HttpRequest,

Вместо ViewRendererВы можете легко попытаться передать PhpRenderer экземпляр к вашим услугам и оказать ViewModel используя это. Например:

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);
}

Теперь в вашем MailService:

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
}

Надеюсь, поможет.

0

Другие решения

Спасибо Foozy теперь учение консоли Funciton! но я не могу прочитать шаблон для рендеринга почты.

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

где ошибка?

Спасибо

0

У меня была такая же проблема после того, как я добавил конфигурацию view_manager в конфигурацию консоли. Решение состоит в том, чтобы просто вытащить средство визуализации из ViewManager:

$renderer = $serviceLocator->get('ViewManager')->getRenderer();

Это также зарегистрирует сервис ViewRenderer, поэтому любые вызовы get('ViewRenderer') после этого тоже должно сработать.

0

в 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');
0
По вопросам рекламы [email protected]