Может ли nusoap возвращать массив строк?
Я хотел бы вернуть массив строк в моих веб-службах
Я пробовал :
<?php
require_once('nusoap/nusoap.php');
$server = new soap_server();
$server->configureWSDL('NewsService', 'urn:NewsService');
$server->register('GetAllNews',
array(),
array('return' => 'xsd:string[]'),
'urn:NewsService',
'urn:NewsService#GetAllNews',
'rpc',
'literal',
''
);
// Define the method as a PHP function
function GetAllNews()
{
$stack = array("orange", "banana");
array_push($stack, "apple", "raspberry");
return $stack;
}
но это не работает. Каков правильный синтаксис для этого ?
заранее спасибо за любую помощь
3 ответов
сначала нужно определить новый тип, который описывает массив строк, вот так:
$server->wsdl->addComplexType(
'ArrayOfString',
'complexType',
'array',
'sequence',
'',
array(
'itemName' => array(
'name' => 'itemName',
'type' => 'xsd:string',
'minOccurs' => '0',
'maxOccurs' => 'unbounded'
)
)
);
затем вы можете использовать tns:ArrayOfString
в качестве возвращаемого типа.
этот сайт описывает хороший способ вернуть сложные типы данных и получить его с помощью C#: http://sanity-free.org/125/php_webservices_and_csharp_dotnet_soap_clients.html
при возврате массива массивов вам может потребоваться другая конфигурация от Oliver. Например, phfunc2php использует этот метод в nusoapcode.класс.php файл (https://github.com/sylnsr/pgfunc2php/blob/master/nusoapcode.class.php). Код, который он генерирует, выглядит так:
$server->wsdl->addComplexType(
'ArrayOfArrays','complexType','array','',
'SOAP-ENC:Array',
array(),
array(array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'xsd:string[]')));
и тогда функции просто должны вернуть "tnsArrayOfArrays:
$server->register(
'sel_signon_id_by_uuid',
array('user_uuid' => 'xsd:string'),
array('return'=>'tns:ArrayOfArrays'),
проект, упомянутый выше, может скомпилировать рабочий код для вас, если вы хотите видеть это.