【问题标题】:Zend_Soap_AutoDiscover and PHP namespacesZend_Soap_AutoDiscover 和 PHP 命名空间
【发布时间】: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


    【解决方案1】:

    Zend Framework 1.x 不支持 PHP 5.3 的命名空间。您将不得不等待 Zend Framework 2,或者不要为 Soap 服务类使用名称空间。

    【讨论】:

    • 是的,这也是我的结论。但是,如果他们明确表示会有所帮助。
    猜你喜欢
    • 2014-04-25
    • 1970-01-01
    • 2012-05-19
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    • 2010-10-20
    相关资源
    最近更新 更多