Мне нужно вернуть ответ на вызов 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);