gpt4 book ai didi

php - 自动发现不尊重 Zend Framework 类映射?

转载 作者:搜寻专家 更新时间:2023-10-31 21:15:51 24 4
gpt4 key购买 nike

我使用 ZendFramework 在 Wordpress 中创建了一个完整的插件,现在我想公开一个 Web 服务来访问数据,因为我需要创建一个 C# 导入应用程序。

我面临的问题是,即使我将 web 服务返回的类型设置为特定类型,类映射也不会启动并转换类型。例如:

/**
* Retursn all events registered on the sgm web interface
*
* @return models_event[]
*/
public function getAllEvents(){
return models_event::getEvents();
}

定义在 models_event 数组中返回的类。如果我启动 WSDL 部分,我会得到一个添加为“models_event”的复杂类型,但这是错误的:

    $autodiscover = new Zend_Soap_AutoDiscover(array(
'classmap' => array(
'event' => "models_event",
),
'encoding' => 'utf-8'
));
$autodiscover->setComplexTypeStrategy(new Zend_Soap_Wsdl_Strategy_ArrayOfTypeComplex());
$autodiscover->setClass('models_webservice');
$autodiscover->handle();

我类映射 models_event 到事件。所以我的 WSDL 应该导出复杂类型:

<xsd:complexType name="ArrayOfmodels_event">
<xsd:complexContent>
<xsd:restriction base="soap-enc:Array">
<xsd:attribute ref="soap-enc:arrayType" wsdl:arrayType="tns:models_event[]"/>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="models_event">
<xsd:all/>
</xsd:complexType>

但是正如您所看到的,它正在返回一个 models_event[] 复杂类型和 models_event 复杂类型...我都搞砸了...为什么要这样做?

最佳答案

您使用的是哪个版本的 Zend Framework?

在我正在查看的版本 (1.11.10) 中,Zend_Soap_AutoDiscover 没有将选项数组作为构造函数参数之一。构造函数的方法签名如下:

    public function __construct($strategy = true, $uri=null, $wsdlClass=null)

您所指的 classmap 选项在 Zend_Soap_Server 中,IMO 的存在主要是因为 Zend_Soap_Server 主要是 PHP 原生 SoapServer 的包装器> 类,因此它的接口(interface)允许您访问底层类提供的所有选项。我还猜测 classmap 选项的存在是为了解决一个稍微不同的问题,即您正在基于预先存在的 WSDL 构建 SOAP 服务器并希望将 WSDL 名称映射到内部 PHP 类名。

我的建议是将 models_event 类重命名为 event(或者,更好的是,Event),这有望帮助您更接近您在 WSDL 中寻找的内容。

关于php - 自动发现不尊重 Zend Framework 类映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9020706/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com