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

0

У меня проблема с консолью доктрины. У меня есть 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 я получаю vendor/bin/doctirne-module ошибку:

Неустранимая ошибка: исключение "Zend\ServiceManager\Exception\ServiceNotFoundException" с сообщением "Zend\ServiceManager\ServiceManager :: get не удалось получить или создать экземпляр для ViewRenderer" в /Users/Daniele/Apps/corradini.com/www/продавец/ZendFramework/ZendFramework/library/Zend/ServiceManager/ServiceManager.php: 529

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

Теги:
command-line-interface
doctrine2
zend-framework2

4 ответа

0

в ZF3 также TemplateMapResolver может помочь вам исправить некоторые проблемы, такие как: "PhpRenderer :: render: Unable to render template"

$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

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

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

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

0

Спасибо foozy теперь доктрина консоли funciton! но я не могу прочитать tempalte для отправки почты.

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

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

Вместо ViewRenderer вы можете легко попробовать PhpRenderer экземпляр 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
   }

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню