我正在尝试在zf2中创建一个简单的服务,以便我可以在视图助手中访问
步骤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()
{
}
}
第二步 我按照以下方式在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);
});
}
第三步 最终我在我的视图助手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;
}
}
第四步,然后我在其中一个视图中像这样调用我的测试视图助手。
$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:
我缺少什么?
Service1
实例而不是Abc
。因此,视图助手机制尝试将视图实例注入到Service1
实例中。 - Daniel M