zf2 Создание простого сервиса и доступ к нему через viewhelper

Я пытаюсь создать простой сервис в zf2, который я могу получить, используя в viewhelper

Шаг 1. Я искал класс в src / Application / Service / Service1.php, как следует

namespace Application\Service; use Zend\ServiceManager\ServiceLocatorAwareInterface; use Zend\ServiceManager\ServiceLocatorInterface; class Service1 implements ServiceLocatorAwareInterface { public function __construct() { } public function setServiceLocator(ServiceLocatorInterface $serviceLocator) { } public function getServiceLocator() { } } 

Шаг 2 Я установил это в файле module.php, как показано ниже.

 public function getServiceConfig() { return array( 'factories' => array( 'Application\Service\Service1' => function ($sm) { return new \Application\Service\Service1($sm); }, ) ); } public function onBootstrap($e) { $serviceManager = $e->getApplication()->getServiceManager(); $serviceManager->get('viewhelpermanager')->setFactory('Abc', function ($sm) use ($e) { return new \Application\View\Helper\Abc($sm); }); } 

Шаг 3, наконец, я получаю это в своем методе helper src / Application / View / Helper / Abc.php test (), как это, я прокомментирую эту строку $this->sm->get('Application\Service\Service1'); нет ошибки, должно быть что-то, что мне не хватает на службе?

 namespace Application\View\Helper; use Zend\View\Helper\AbstractHelper; class Abc extends AbstractHelper { protected $sm; public function test() { $this->sm->get('Application\Service\Service1'); } public function __construct($sm) { $this->sm = $sm; } } 

Шаг4, тогда я вызываю свой помощник тестового представления в одном из таких представлений.

 $this->Abc()->test(); 

Я получаю следующую ошибку.

 Fatal error: Call to undefined method Application\Service\Service1::setView() in vendor/zendframework/zendframework/library/Zend/View/HelperPluginManager.php on line 127 Call Stack: 

что мне не хватает?

Solutions Collecting From Web of "zf2 Создание простого сервиса и доступ к нему через viewhelper"

Альтернативой, только в PHP 5.4, без конкретной конфигурации, было бы использование признаков :

extract module.config.php:

 'view_helpers' => array( 'invokables' => array( 'myHelper' => 'Application\View\Helper\MyHelper', ), 

MyHelper.php:

 <?php namespace Application\View\Helper; use Zend\ServiceManager\ServiceLocatorAwareInterface; class HeadScript extends \Zend\View\Helper\MyHelper implements ServiceLocatorAwareInterface { use \Zend\ServiceManager\ServiceLocatorAwareTrait; public function __invoke() { $config = $this->getServiceLocator()->getServiceLocator()->get('Config'); // do something with retrived config } } 

измените строку $this->sm->getServiceLocator()->get('Application\Service\Service1'); в методе ниже

 class Abc extends AbstractHelper { protected $sm; public function test() { $this->sm->getServiceLocator()->get('Application\Service\Service1'); } public function __construct($sm) { $this->sm = $sm; } }