2010-05-26 136 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