你好Stackoverflow社区。
我目前正在使用Zend Framework 2开发一个XML RPc服务器。我有一个ServiceController,负责创建服务器
class ServiceController extends AbstractActionController{
public function xmlAction()
{
$this->handleXML();
$response = $this->getResponse();
return $response;
}
private function handleXML()
{
$xmlServer = new ZendXmlRpcServer();
$xmlServer->setClass('BeamModelserviceService', 'service');
echo $xmlServer->handle();
}
}
ServiceClass是我的Webapi
class Service{
/**
* getAvailablePackages
*
* getAvailablePackages is responsible for returning all packages which reference a given licensenumber
*
* @param string $licenseNumber
* @return String
*/
public function getAvailablePackages($licenseNumber){
//need to access the entityManager
$em = $this->getServiceLocator->get('DoctrineORMEntityManager');
return "testresponse";
}
}
XML RPC服务器工作正常。我可以用客户端调用getAvailablePackages方法,并得到"testresponss"作为响应。然而,问题是,我想从getAvailablePackages中的数据库中选择一些数据,但我不确定如何访问非Controller类中的entityManager。
有人知道如何解决这个问题吗?感谢您的回复。
可能的解决方案是建立一个工厂。
<?php
namespace ....;
use ZendServiceManagerServiceLocatorInterface;
use ZendServiceManagerFactoryInterface;
class ServiceFactory implements FactoryInterface
{
public function createService (ServiceLocatorInterface $serviceLocator)
{
return new Service ($serviceLocator->get ('DoctrineORMEntityManager'));
}
}
因此,您将能够访问实体管理器。