栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用CakePHP 3.4输出自定义HTTP正文内容?回声导致“无法发出标题”错误

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用CakePHP 3.4输出自定义HTTP正文内容?回声导致“无法发出标题”错误

控制器永远不要回显数据!回传数据会导致各种问题,从测试环境中无法识别的数据到无法发送的报头,甚至数据都被切断。

在CakePHP
2.x中这样做是错误的,即使它在某些甚至大多数情况下都可行。通过引入新的HTTP堆栈,CakePHP现在在回显响应之前显式检查发送的标头,并相应地触发错误。

发送自定义输出的正确方法是配置并返回响应对象,或使用序列化视图,并且在3.x中仍然相同。

从文档引用:

控制器动作通常用于

Controller::set()
创建View用于渲染视图图层的上下文。由于CakePHP使用的约定,因此不需要手动创建和呈现视图。相反,一旦控制器动作完成,CakePHP将处理呈现和交付View。

如果出于某种原因您想跳过默认行为,则可以

CakeNetworkResponse
从具有完整创建的响应的操作中返回一个对象。

*从3.4开始

CakeHttpResponse

食谱 >控制器>控制器动作

配置响应

使用符合PSR-7的界面

$content = json_enpre(['method' => __METHOD__, 'class' => get_called_class()]);$this->response = $this->response->withStringBody($content);$this->response = $this->response->withType('json');// ...return $this->response;

对PSR-7兼容的接口使用不可改变的方法,的返回值的因而利用率

withStringBody()
withType()
。在CakePHP
<3.4.3中,
withStringBody()
它不可用,您可以直接写入主体流,而不会更改响应对象的状态:

$this->response->getBody()->write($content);

使用不推荐使用的界面

$content = json_enpre(['method' => __METHOD__, 'class' => get_called_class()]);$this->response->body($content);$this->response->type('json');// ...return $this->response;

使用序列化视图

$content = ['method' => __METHOD__, 'class' => get_called_class()];$this->set('content', $content);$this->set('_serialize', 'content');

这还需要使用请求处理程序组件,并允许扩展解析和使用带有

.json
追加的对应URL
,或发送带有
application/json
accept标头的适当请求。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/597135.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号