2010-05-26 118 views
1

我在通過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

回答

1

Zend框架1.x中不支持PHP 5.3的命名空間。你將不得不等待Zend Framework 2,或者不要使用Soap服務類的命名空間。

+0

是的,這也是我的結論。但是,如果他們明確表示,那將會很有幫助。 – 2010-09-21 22:38:02