【发布时间】:2010-05-26 18:34:42
【问题描述】:
我第一次在通过 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 框架都将类传递给我的自动加载函数,没有命名空间。进一步挖掘,我看到框架中有一系列方法,从 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
【问题讨论】:
标签: php zend-framework