zend-framework - 如何覆盖 Laminas XML-RPC 服务器响应的标头?
问题描述
试图覆盖Laminas XML-RPC 服务器响应的标头。标头Content-Type
应该application/xml
代替默认的text/html
. 阅读文档后,不清楚该怎么做,它指出:
类似于请求对象,
Laminas\XmlRpc\Server
可以返回自定义响应对象;默认情况下,Laminas\XmlRpc\Response\Http
返回一个对象,该对象发送一个适当的Content-Type
HTTP 标头以用于 XML-RPC。自定义对象的可能用途是记录响应,或将响应发送回STDOUT
.要使用自定义响应类,
Laminas\XmlRpc\Server::setResponseClass()
请在调用之前使用handle()
.
有一个示例用法,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
解决方案
当我使用 Laravel 时,我可以执行以下操作。这样就不需要为$server->setResponseClass( XmlRpcService::class);
. 显然 Laravel 可以接受$server->handle()
,它本身已经是一个响应,并设置所需的标头。
return response($server->handle(), 200)->header('Content-Type', 'text/xml');
推荐阅读
- node.js - 在 AWS ec2 实例上部署 Node Express 应用程序和 php 应用程序的最佳实践
- php - 从对象 php laravel 获取数据
- git - Git:制作一个由当前分支的更改组成的 PR,该更改取决于另一个分支的更改
- transactions - Spring重试期间如何根据线程增加Atomikos默认jta超时
- django - 自定义的 django all-auth 表单未提交
- c# - 如何将列中的二进制数据转换为文件?
- oracle - 如何使用 PLSQL 为新表创建 id 并在数据仓库中的新表中插入genres_id 和流派(2038 条记录)
- google-cloud-platform - 谷歌云功能无法访问 GCS 存储桶中的数据
- python - AttributeError: 'DataFrame' 对象没有属性 'raw_ratings' 不适合 KNNBasic 模型
- html - Bootstrap 汉堡图标不可见