我在通過Zend_Soap提供Web服務的應用程序中首次在PHP中使用命名空間,並且遇到了自動發現功能的問題。我的代碼是這樣的:Zend_Soap_AutoDiscover和PHP命名空間
$autodiscoverObj = new Zend_Soap_AutoDiscover();
$autodiscoverObj->setClass('My\\Namespace\\MyClass');
而且我得到象這樣的錯誤,「Zend_Soap_Wsdl_Exception:無法添加一個複雜類型MyClass的是不是一個對象或者類找不到」。
如果我離開關setClass()值的名稱空間部分,如:
$autodiscoverObj->setClass('MyClass');
我得到的,「Zend_Server_Reflection_Exception:傳遞給attachClass()」無效的類或對象,所以它會出現包括命名空間,因爲我做的是正確的。
在試圖修復WSDL異常時,我注意到,無論我如何在setClass()方法中引用我的類,Zend框架將類傳遞給我的自動加載函數sans namespace進一步挖掘,我在框架中看到了一系列方法,從setClass()本身開始,有一個可選的名稱空間參數,但不要使用它(它們甚至被標記爲「未使用」)。
我的下一個想法是使用setClassmap(),但是,雖然Zend_Soap_Server類中提供了它,但它在Zend_Soap_AutoDiscover類中是不可用的,IMO是一個確定的bug that's already been filed by someone else。
Zend框架,特別是相同的SOAP組件,簡單地與名稱空間不兼容?如果不是,我該如何創建一個使用其他名稱空間的類的SOAP服務?
版本信息:
PHP:5.3.0 Zend框架:1.9.8
是的,這也是我的結論。但是,如果他們明確表示,那將會很有幫助。 – 2010-09-21 22:38:02