2014-08-28 78 views
0

我必須根據WSDL規範爲SOAP生成一個PHP類,並且此WSDL具有2個不同的複雜類型,如下所示(其中一個稱爲「method1」,而其他的「方法一」):Zend_SOAP無法生成具有2個具有相同名稱的PHP類的WSDL

<xs:complexType name="method1"> 
    <xs:sequence> 
     <xs:element minOccurs="0" name="return" type="tns:Method1"/> 
    </xs:sequence> 
    </xs:complexType> 
    <xs:complexType name="Method1"> 
    <xs:sequence> 
     <xs:element name="name" type="xs:long"/> 
     <xs:any namespace="##other" processContents="lax"/> 
    </xs:sequence> 
    </xs:complexType> 

所以,就這樣被生成的PHP類,但我會得到當執行Web服務的錯誤「在文檔的末尾附加內容」,因爲這兩個類都有同名。

class method1 { 
    /** @var Method1 */ 
     var $return; 
} 

class Method1 { 
    /** @var int */ 
    var $name = ''; 
    /** @var mixed */ 
    var $any = ''; 
} 

有沒有辦法解決這個問題?問題是我必須遵循另一家公司的WSDL規範,所以它應該有這兩種複雜類型。謝謝

回答

1

您不需要命名與WSDL中複雜類型相同的PHP類。事實上,我會故意不這樣做,因爲類名必須符合我自己的(基於PSR)架構中的自動加載和編碼風格。

還有一個很好的功能可以幫助您:SOAP客戶端中的類映射選項。這將SOAP請求和響應中的每個想要的複雜類型映射到表示它的PHP類。

你會使用這樣的:

$client = new SoapClient(
    $wsdl, 
    array(
     'classmap' => array(
      'method1' => 'YourLowercaseMethod1Class', 
      'Method1' => 'YourInitialCapsMethod1Class', 
     ) 
    ) 
); 

如果你這樣說,你得到的將不能使用默認stdClass這些複雜類型的任何迴應,但定義的PHP類,允許史詩在自動完成方面獲勝。