我首次在通过Zend_Soap提供Web服务的应用程序中使用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 Framework:1.9.8
答案 0 :(得分:1)
Zend Framework 1.x不支持PHP 5.3的命名空间。您必须等待Zend Framework 2,或者不要将名称空间用于Soap服务类。