我必须遵循WSDL规范为SOAP生成一个PHP类,这个WSDL有两个不同的复杂类型,如下所示(一个叫#34; method1"另一个" Method1" ):
<xs:complexType name="method1">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="tns:Method1"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Method1">
<xs:sequence>
<xs:element name="name" type="xs:long"/>
<xs:any namespace="##other" processContents="lax"/>
</xs:sequence>
</xs:complexType>
因此,PHP类会像这样生成,但我会得到错误&#34;文档末尾的额外内容&#34;执行Web服务时,因为这两个类具有相同的名称。
class method1 {
/** @var Method1 */
var $return;
}
class Method1 {
/** @var int */
var $name = '';
/** @var mixed */
var $any = '';
}
有什么方法可以解决这个问题?问题是我必须遵循另一家公司的WSDL规范,因此它应该具有这两种复杂类型。感谢
答案 0 :(得分:1)
您不需要将PHP类命名为与WSDL中的复杂类型相同。事实上,我故意不这样做,因为类名必须符合我自己的(基于PSR)架构,以实现自动加载和编码风格。
这里有一个很好的功能:SOAP客户端中的classmap选项。这会将SOAP请求和响应中的每个所需复杂类型映射到表示它的PHP类。
您可以这样使用它:
$client = new SoapClient(
$wsdl,
array(
'classmap' => array(
'method1' => 'YourLowercaseMethod1Class',
'Method1' => 'YourInitialCapsMethod1Class',
)
)
);
如果你这样做,你获得的任何响应都不会对这些复杂类型使用默认的stdClass
,而是定义的PHP类,它允许在自动完成方面获得史诗般的胜利。