Вернуть XML-ответ от SoapClient? - PullRequest
1 голос
/ 14 сентября 2011

Я создал веб-сервис, который возвращает массив в ответ, мой веб-сервис собран с Zend в моем контроллере. Я делаю это:

$soap = new Zend_Soap_Server("http://blabla/wsdl");
$soap->setClass('Foo');
$soap->handle();
exit;

Это класс Foo с функцией, которую я вызываю:

class Foo {
    /**
     * Test general
     * @param Int $param
     * @return Array
     */
    public function general($param) {
        return array('a' => 'b');
    }
}

Я вызываю это с помощью:

$options = array(
    "trace" => 1,
    "exceptions" => 0,
    "cache_wsdl" => 0
);
$soap = new SoapClient('http://blabla/wsdl', $options);
print_r('<pre>');print_r($soap->general(6));
exit;

Но я не хочу, чтобы он возвращал массив, но XML ... Как я мог это сделать?

Ответы [ 2 ]

4 голосов
/ 14 сентября 2011

Чтобы получить последний ответ XML в виде строки, вызовите SoapClient::__getLastResponse().

$response = $soap->general(6);
$response_xml = $soap->__getLastResponse();

Для этого необходимо, чтобы опция trace была включена, что вы уже делаете.

0 голосов
/ 14 сентября 2011

Вот аналогичный вопрос: Как преобразовать массив в SimpleXML

class Foo {
    /**
     * Test general
     * @param Int $param
     * @return Array
     */
    public function general($param) {
        //return array('a' => 'b');
        $xml = new SimpleXMLElement('<root/>');
        $a = array('a' => 'b');
        array_walk($a, array($xml,'addChild'));
        return $xml->asXML();

    }
}
...