ZF2 + Doctrine 2 + SOAP

时间:2013-09-27 17:48:43

标签: web-services soap doctrine-orm zend-framework2

我有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。

1 个答案:

答案 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文件中实例化。

所以,现在好了!

谢谢!