2014-11-08 46 views
0

我有教條控制檯的問題。我有一個包含此代碼MailServiceFactory.php:ZF2控制檯錯誤 - Get無法爲ViewRenderer獲取或創建實例

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我得到的錯誤如下:

Fatal error: Uncaught exception 'Zend\ServiceManager\Exception\ServiceNotFoundException' with message 'Zend\ServiceManager\ServiceManager::get was unable to fetch or create an instance for ViewRenderer' in /Users/Daniele/Apps/corradini.com/www/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php:529

爲什麼我得到這個錯誤?

回答

0

您不能在控制檯請求上從ServiceLocator直接獲得ViewRenderer,因爲它不在舞臺上,因爲請求不是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!但我無法讀取渲染郵件的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

我有同樣的問題後,我加入了view_manager配置控制檯配置。解決的辦法是剛剛從ViewManager拉渲染:

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

這也將註冊ViewRenderer服務,所以以後這get('ViewRenderer')任何調用應該工作了。

相關問題