【发布时间】:2020-05-20 10:51:01
【问题描述】:
试图覆盖 Laminas XML-RPC server 响应的标头。标题 Content-Type 应该是 application/xml 而不是默认的 text/html。阅读文档后不清楚该怎么做,它指出:
类似于请求对象,
Laminas\XmlRpc\Server可以返回自定义响应对象;默认情况下,会返回一个Laminas\XmlRpc\Response\Http对象,该对象会发送一个适当的Content-TypeHTTP 标头以用于XML-RPC。自定义对象的可能用途是记录响应,或将响应发送回STDOUT。要使用自定义响应类,请在调用
handle()之前使用Laminas\XmlRpc\Server::setResponseClass()。
有一个setResponseClass() 的用法示例,但不是该类的样子。查看源代码唯一清楚的是它应该扩展Laminas\XmlRpc\Response,仅此而已。
我尝试过但没有用的方法:
use Laminas\XmlRpc\Response as XmlRpcResponse;
/**
* HTTP response
*/
class XmlRpcService extends XmlRpcResponse
{
protected $type = 'application/xml'; // This was just for testing but isn't working either
/**
* Override __toString() to send HTTP Content-Type header
*
* @return string
*/
public function __toString()
{
if (! headers_sent()) {
header('Content-Type: application/xml; charset=' . strtolower($this->getEncoding()));
}
return parent::__toString();
}
}
$server = new \Laminas\XmlRpc\Server();
$server->setClass( 'SomeClass', 'namespace' );
$server->setResponseClass( XmlRpcService::class);
return $server->handle();
希望有人能指出我如何覆盖标题的正确方向。相关报道:https://discourse.laminas.dev/t/how-to-override-the-headers-of-xml-rpc-server-response/1632
【问题讨论】:
标签: zend-framework xml-rpc laminas