我试图弄清楚如何使用 Laminas SOAP Autodiscover 生成多级 XML,但我无法做到。
我阅读了文档,但找不到解决方法。这是链接https://docs.laminas.dev/laminas-soap/auto-discovery/
这是我需要的输出:
<Header>
<item1>?</item1>
<item2>?</item2>
<Line>
<item3>?</item3>
<item4>?</item4>
</Line>
</Header>
但是我找不到一种方法来告诉 AutoDiscover 一个头部(Header 标记,它将包含一些标记和一个名为 Line 的子标记)。生成的唯一 WSDL 是从函数中删除 Header 和 Line。
Class Soap
{
public function test($item1,$item2,$item3,$item4) {
return;
}
}
$serverUrl = "http://localhost/api.php";
$options = [
'uri' => $serverUrl,
];
$server = new \Laminas\Soap\Server(null, $options);
if (isset($_GET['wsdl'])) {
$soapAutoDiscover = new \Laminas\Soap\AutoDiscover(new \Laminas\Soap\Wsdl\ComplexTypeStrategy\ArrayOfTypeSequence());
$soapAutoDiscover->setBindingStyle(array('style' => 'document'));
$soapAutoDiscover->setOperationBodyStyle(array('use' => 'literal'));
$soapAutoDiscover->setClass('Soap');
$soapAutoDiscover->setUri($serverUrl);
header("Content-Type: text/xml");
echo $soapAutoDiscover->generate()->toXml();
} else {
$soap = new \Laminas\Soap\Server($serverUrl . '?wsdl');
$soap->setObject(new \Laminas\Soap\Server\DocumentLiteralWrapper(new Soap()));
$soap->handle();
}
这将只输出一个包含四个项目的 WSDL:
<xsd:element name="test">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="item1" type="xsd:anyType"/>
<xsd:element name="item2" type="xsd:anyType"/>
<xsd:element name="item3" type="xsd:anyType"/>
<xsd:element name="item4" type="xsd:anyType"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
任何帮助将不胜感激。