PHP Soap传递对象数组
我的方法:PHP Soap传递对象数组,php,arrays,soap,wsdl,Php,Arrays,Soap,Wsdl,我的方法: /** * @param \LeosEbayGateway\Soap\Model\Apigw\SkuQty $changeStocksBySkus[] */ public function change_stocks_by_skus(array $changeStocksBySkus) { var_dump($changeStocksBySkus); die(); } 索皮 输入: <soapenv:Envelope xmlns:xsi="http://w
/**
* @param \LeosEbayGateway\Soap\Model\Apigw\SkuQty $changeStocksBySkus[]
*/
public function change_stocks_by_skus(array $changeStocksBySkus)
{
var_dump($changeStocksBySkus);
die();
}
索皮
输入:
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ind="http://ebay/index.php">
<soapenv:Header/>
<soapenv:Body>
<ind:change_stocks_by_skus>
<changeStocksBySkus>
<sku>1</sku>
<qty>2</qty>
</changeStocksBySkus>
<changeStocksBySkus>
<sku>3</sku>
<qty>4</qty>
</changeStocksBySkus>
</ind:change_stocks_by_skus>
</soapenv:Body>
</soapenv:Envelope>
我正在传递一个值数组,但输出只有一个对象而不是数组,为什么
行动:
public function wsdlAction(Request $request)
{
$autodiscover = new \Zend\Soap\AutoDiscover();
$autodiscover->setClass('\\LeosEbayGateway\\Soap\\Service\\SoapServerService');
$autodiscover->setUri('http://' .$_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME']);
return new Response($autodiscover->toXml(), 200, ['Content-Type' => 'application/xml']);
}
public function apiAction(Request $request)
{
$options = array(
'cache_wsdl' => WSDL_CACHE_NONE,
'uri' => 'http://localhost:8000/api/wsdl',
);
$server = new \Zend\Soap\Server(null, $options);
$server->setObject(new SoapServerService());
$server->handle();
}
SoapServerService.php
<?
namespace test\Soap\Service;
class SoapServerService {
/**
* @var array
*/
private $config;
/**
* @var Application
*/
private $application;
public function __construct()
{
}
/**
* @param \test\Soap\Model\Apigw\SkuQty $changeStocksBySkus[]
*/
public function change_stocks_by_skus(array $changeStocksBySkus)
{
if(!is_array($changeStocksBySkus)) {
throw $this->toSoapFault("changeStocksBySkus param is not array!");
}
try {
return (new SoapServiceProducts())->ChangeStocksBySkus($changeStocksBySkus);
} catch (Exception $e) {
throw $this->toSoapFault($e->getMessage());
}
}
}
因为查看XML,sku
9是唯一更改的。它在XML中是重复的。@mvbrakel否,我正在编辑示例相同的结果。请提供PHP,从中调用函数change\u stocks\u by\u sku
。似乎选择器缺少用于从soapUI软件调用相同名称的多个节点的功能。但我们正在修复一段PHP,对吗?几乎想不到SoapUI会调用按库存单位更改库存
。我知道XML是通过使用SoapUI提供的
<?
namespace test\Soap\Service;
class SoapServerService {
/**
* @var array
*/
private $config;
/**
* @var Application
*/
private $application;
public function __construct()
{
}
/**
* @param \test\Soap\Model\Apigw\SkuQty $changeStocksBySkus[]
*/
public function change_stocks_by_skus(array $changeStocksBySkus)
{
if(!is_array($changeStocksBySkus)) {
throw $this->toSoapFault("changeStocksBySkus param is not array!");
}
try {
return (new SoapServiceProducts())->ChangeStocksBySkus($changeStocksBySkus);
} catch (Exception $e) {
throw $this->toSoapFault($e->getMessage());
}
}
}