我使用Zend soap autodiscovery來爲我的Web服務器WSDL文件的nillable =「真」。問題是每個complexType的每個元素都默認爲nillable="true"
。我如何根據需要聲明元素?我讀了PHPDoc但什麼也沒找到。Zend的肥皂自動發現和生成WSDL
編輯:代碼:
class MyService {
/**
* Identify remote user.
*
* @param LoginReq
* @return LoginResp
*/
public function login($request) {
// Code ....
}
}
class LoginReq {
/** @var string */
public $username;
/** @var string */
public $password;
}
class LoginResp {
/** @var string */
public $errorCode;
}
生成WSDL:
<xsd:complexType name="LoginReq">
<xsd:all>
<xsd:element name="username" type="xsd:string" nillable="true"/>
<xsd:element name="password" type="xsd:string" nillable="true"/>
</xsd:all>
</xsd:complexType>
<xsd:complexType name="LoginResp">
<xsd:all>
<xsd:element name="errorCode" type="xsd:string" nillable="true"/>
</xsd:all>
</xsd:complexType>
EDIT2:我剛剛發現,須申報的元素/可選的,你需要使用minOccurs/maxOcurrs
。它們都默認爲1,所以默認情況下每個元素都是必需的。爲了聲明一個可選元素,你用聲明它。 Nillable只是讓元素變成空的。再次,我如何聲明一個元素爲可選的(所以Zend將minOccurs =「0」添加到該元素)?
你好,我包括一些代碼,謝謝。 – 2011-05-18 09:04:54
感謝您挖掘Zend的源代碼!爲你的努力+1。我不明白爲什麼默認行爲是一切都可以刪節,但使用默認值的屬性。它不應該是相反的嗎?順便說一句,我剛發現這不是我所期待的。我需要知道如何在某些元素上強制執行'minOccurs = 0'。 – 2011-05-23 11:47:53
Zend中唯一提到minOccurs的是Zend/Soap/Wsdl/Strategy/ArrayOfTypeSequence〜145行,它被硬編碼爲0.我有一種感覺,要做你正在嘗試做的事情,你將不得不創建你自己的類庫,它擴展了Zend類併爲你需要的對象添加了minOccurs。我做過那種事了不少,只是儘量保持,所以當你更新的Zend你是不太可能有衝突的變化降至最低。 – jopke 2011-05-26 07:00:38