Soap 服务器 Symfony 如何设置响应

Soap server Symfony how to set response

我正在尝试在 Symfony3 中实现一个非常简单的 soap 调用。 它运行完美,但 return 什么都没有。

在我的控制器中我只是这样称呼它

public function indexAction()
{
    $server = new \SoapServer($this->get('kernel')->getRootDir()."/../web/soap/test.wsdl");
    $server->setObject($this->get('serv.soapservice'));

    $response = new Response();
    $response->headers->set('Content-Type', 'text/xml; charset=ISO-8859-1');

    ob_start();
    $server->handle();
    $response->setContent(ob_get_clean());

    return $response;
}

被调用的函数如下所示

public function hello($param)
{
    return 'Hello, '.$param->name;
}

我用 SoapUI 试过了,效果很好,但是 soap return 是这样的

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://localhost/symfony/test/web/app_dev.php/en/soap">
    <SOAP-ENV:Body>
       <ns1:helloResponse/>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

它不会return这样的函数响应

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://localhost/symfony/test/web/app_dev.php/en/soap">
    <SOAP-ENV:Body>
       <ns1:helloResponse>
           <out>Hello John</out>
       <ns1:helloResponse/>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

我怎样才能return呢?

终于找到问题所在了。我只需要在 hello 函数中更改 return 的方式。 现在看起来像这样,效果很好。

public function hello($param)
{
    $response = array();
    $response['out']='Hello, '.$param->name;
    return $response;
}