Мне нужно вернуть ответ на вызов SOAP в соответствии с WSDL. Все работает нормально, за исключением возврата xsd: любой элемент. Часть WSDL, с которой у меня проблема (это для предполагаемого ответа).
xsd: complexType name = "data"
XSD: последовательность
xsd: любой minOccurs = "1" maxOccurs = "неограниченный"
XSD: последовательность
XSD: ComplexType
То, что я пробовал:
foreach ($ data as $ name => $ value) {
$ object-> data-> any [$ name] = $ value;
}
return $ object;
SOAP-вызов возвращает ответ следующим образом:
..response>
-data> value1value2value3value4- / данные>
... / ответ>
Хотя перед возвратом объекта можно увидеть, что объект создан так, как он должен был быть:
$ object-> data-> any [name1] = value1
$ object-> data-> any [имя2] = значение2
и т.д...
Но в возвращаемом asnwer все значения просто помещаются в одну строку в одно поле возврата. Этот код и возврат корректно работают с любым другим типом поля (например, xsd: string и т. Д.).
Как вернуть объект в случае xsd: any type, чтобы получить ответ с несколькими полями в соответствии с именами и значениями?
благодаря
Решила проблему.
Мне нужно было создать объект SoapVar для поля.
$ o = new Object ();
$ o-> field = $ value;
$ object-> data = new SoapVar (поле $, XSD_ANYTYPE);
return $ object;
благодаря
Это также должно работать:
$object->data = new SoapVar($data, SOAP_ENC_OBJECT);