我有2个应用程序,Intranet和Extranet。 Extranet应用程序不直接与数据库通信,仅与Web服务通信。 Intranet应用程序与数据库一样正常。
我需要使用SOAP与我的数据库进行通信,所以我有 查看 - >控制器 - >服务 - >实体。
与我正在使用的服务进行通信:
[控制器]
$client = new Client("my_soap_address");
$user = $client->test();
[服务]
public function test()
{
$res = $this->em->getRepository("my_entity")->fetchPairs();
return $res;
}
没有SOAP,效果很好! 使用SOAP,返回此错误:
Call to a member function getRepository() on a non-object
如果我的服务返回一个字符串,整数或布尔值为:
[服务]
public function test()
{
return "is OK";
}
我的SOAP正常工作。
问题是任何方法如getRepository(),getReference()等。但我需要这些方法来从我的数据库中获取或放入信息。
拜托,有人可以帮忙解决这个问题吗?
非常感谢!
ps:我有一个带有handleWSDL的控制器和控制器与服务之间的handleSOAP。
答案 0 :(得分:1)
我解决了我的问题! 我需要发送带有Soap的EntityManager来进行服务工作。
我们走吧:
在我的SoapController中:
use Path\of\my\service as MyService;
public function handleSOAP($class, $url) {
$soap = new Server($url."?wsdl");
$soap->setClass($class);
$soap->setObject(new MyService($this->getServiceLocator()->get('Doctrine\ORM\EntityManager')));
$soap->handle();
}
对于作品,我需要setObject方法中的实例,我的服务,因为我在getServiceConfig()内的Module.php文件中实例化。
所以,现在好了!
谢谢!