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());
        }

    }
}