Я относительно новичок в Soap на «создании сервисной части», поэтому заранее заблаговременно предлагаю любую терминологию, которую я собираю.Возвращение массива PHP из PHP SoapServer
Возможно ли вернуть массив PHP из службы обработки удаленных процедур, которая была настроена с использованием класса SoapServer класса PHP?
У меня есть WSDL (встроенный, слепо следуя учебник), что, в частности, выглядит примерно так
<message name='genericString'>
<part name='Result' type='xsd:string'/>
</message>
<message name='genericObject'>
<part name='Result' type='xsd:object'/>
</message>
<portType name='FtaPortType'>
<operation name='query'>
<input message='tns:genericString'/>
<output message='tns:genericObject'/>
</operation>
</portType>
Метод PHP Я звоню с именем запроса, и выглядит что-то вроде этого
public function query($arg){
$object = new stdClass();
$object->testing = $arg;
return $object;
}
Это позволяет мне позвонить
$client = new SoapClient("http://example.com/my.wsdl");
$result = $client->query('This is a test');
и дамп результат будет выглядеть примерно так
object(stdClass)[2]
public 'result' => string 'This is a test' (length=18)
Я хочу вернуть собственный массив/набор PHP из моего метода запроса. Если я изменю свой метод запроса, чтобы вернуть массив
public function query($arg) {
$object = array('test','again');
return $object;
}
Он сериализуется в объект со стороны клиента.
object(stdClass)[2]
public 'item' =>
array
0 => string 'test' (length=4)
1 => string 'again' (length=5)
Это имеет смысл, так как я имею конкретный xsd:object
как тип результата в моем WSDL. Я бы хотел, если возможно, вернуть собственный PHP-массив, который не был завершен в Object. Мои инстинкты говорят, что есть определенный тип xsd:, который позволит мне выполнить это, но я не знаю. Я также соглашусь на то, что объект сериализуется как ArrayObject
.
Не сдерживайте учебу меня в технических подробностях os WSDL. Я пытаюсь понять основные концепции fo
Две причины.Поскольку это даст мне массив с одним ключом с именем «элемент», который содержит мой массив, и, что более важно, я хочу создать службу, которую конечные пользователи могут использовать, и получить массив обратно без необходимости его запускать. –
И soap-enc: Array не подходит для ваших нужд? – hobodave
Имейте в виду, что это не рекурсивно конвертируется. Поэтому, если у вас есть объект stdClass на более глубоких уровнях вашего ответа, они не будут преобразованы. В этом случае единственный способ, о котором я могу думать, - это ответ Лубос. – flu