如何使用ZF2创建SOAP服务?

时间:2014-07-25 11:43:36

标签: php web-services soap wsdl zend-framework2

我的代码有什么问题?如何为我的Math类创建SOAP服务?
请注意,我没有提到Math.php的命名空间,因为如果我这样做,我在浏览器上收到class Math does not exist消息。 没有提到Math类的命名空间如何在indexAction()中创建Math对象 请指导我如何为Math类创建我的第一个wsdl。

文件夹结构
模块
--Soap
----控制器
------> IndexController.php
----服务
------> Math.php

IndexController.php

include_once __DIR__ . '/../Services/Math.php'
class IndexController extends AbstractActionController
{
  private $_URI = "http://zf2.services/soap";
  public function indexAction()
  {
   $server = new Server(null, array('uri' => $this->_URI));
   $server->setClass('Math');
   //$server->setObject(new Math());
   $server->handle();
  }
}

Math.php

//namespace Soap\Services;
    class Math
    {
       /**
        * Method
        * @return string
        */
       public function greeting()
       {
         return 'Hello world';
       }
    }

结果XML

<SOAP-ENV ..>
 <SOAP-ENV:Body>
  <SOAP-ENV:Fault>
   <faultcode>sender</faultcode>
   <faultstring>Invalid XML</faultstring>
  </SOAP-ENV:Fault>
 </SOAP-ENV:Body>
</SOAP-ENV>

1 个答案:

答案 0 :(得分:0)

您在Math.php

中编写的命名空间是正确的

在IndexController.php中尝试这个 -

include_once __DIR__ . '/../Services/Math.php';

class IndexController extends AbstractActionController {

    private $_URI = "http://zf2.services/soap";

    public function indexAction() {
        $autodiscover = new \Zend\Soap\AutoDiscover();
        $autodiscover->setClass('Math')
                     ->setBindingStyle(array('style' => 'document'))
                     ->setUri($this->_URI);
        header('Content-type: application/xml');
        echo $autodiscover->toXml();
        exit();
    }
}

我已经尝试过它并且工作正常。