2014-07-25 143 views
0

我的代碼有什麼問題?如何爲我的Math課程創建SOAP服務?
請注意,我沒有提到Math.php的命名空間,因爲如果我這樣做,我在瀏覽器上得到了class Math does not exist消息。 沒有提及Math類的命名空間如何在indexAction()中創建Math對象。
請指導我如何爲Math課程創建我的第一個wsdl。如何使用ZF2創建SOAP服務?

文件夾結構
模塊
--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> 

回答

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(); 
    } 
} 

我已經嘗試過了,它工作正常。

+0

我以前的方法有什麼問題?我如何從soapclient使用這個wsdl? –

+0

您能否提供一些有關ZF2 SOAP的參考鏈接? –

+0

這個鏈接已經足夠 - http://framework.zend.com/manual/2.3/en/modules/zend.soap.auto-discovery.html 對於詳細的實現,你將不得不專門爲它編寫的谷歌博客。至少我是這樣學習ZF2的。祝你好運。 –