Структурирование массива PHP для использования в SOAP с WSDL - PullRequest
4 голосов
/ 17 декабря 2009

Я пишу SoapServer с PHP 5.2, чтобы вернуть список вакансий в другое приложение. Мой документ WSDL требует сложного типа в соответствии с:

<xsd:element name="Vacancies">                            
  <xsd:complexType>
    <xsd:sequence>  
      <xsd:element name="Vacancy" type="ns:VacancyType" minOccurs="0" maxOccurs="unbounded"></xsd:element>
    </xsd:sequence>
  </xsd:complexType>
</xsd:element>

Моя функция генерирует большой вложенный массив для сборки каждой вакансии, а затем возвращает массив массивов (т.е. вакансий) в SoapServer.

К сожалению, каждый массив индексируется. Таким образом, каждый элемент VacancyType в Vacancies имеет уникальный индекс. Это, кажется, отбрасывает определение WSDL, а возвращаемые мне данные просто выдают ошибку разбора. Я бы обычно использовал ассоциативные массивы для значений пары ключей, но поскольку я имею дело с n экземплярами VacancyType, которые не будут работать, поскольку не будет уникальной ссылки.

Есть ли известное решение для такого сценария (например, может быть, объект), или я должен переработать документ WSDL, чтобы обслуживать индексированные массивы?

Спасибо

Ответы [ 3 ]

1 голос
/ 19 июля 2011

Согласно http://sam.xnet.tk/post/15/php-soap-server-part-2/ стиль rpc / literal работает с последовательностью xsd. Тем не менее, я не могу заставить его работать со стилем документа / литералом.

0 голосов
/ 19 июля 2011

В конце концов, я нашел решение: я создаю XML с помощью mysefl и использую

new SoapVar('<myitem>...</myitem><myitem>...</myitem>', XSD_ANYXML);
0 голосов
/ 18 февраля 2011

Вы попробовали nuSAOP?Не требует никаких других установленных библиотек PHP:

Согласно документации PHP, PHP поддерживает подмножества SOAP 1.1, SOAP 1.2 и WSDL1.1.

...