CakePHP 3.4 引入了更严格的标头处理方法,禁止在控制器内直接回显数据。尝试回显内容(如下所示)会导致错误“无法发出标头”:
<code class="php">public function test() { $this->autoRender = false; echo json_encode(['method' => __METHOD__, 'class' => get_called_class()]); }</code>
为什么 CakePHP 抱怨
CakePHP 中不鼓励这种做法出于多种原因:
正确的输出方法
发送自定义输出有两种推荐方法:
配置响应对象:
使用 PSR-7 兼容接口:
<code class="php">$content = json_encode(['method' => __METHOD__, 'class' => get_called_class()]); $this->response = $this->response->withStringBody($content); $this->response = $this->response->withType('json'); return $this->response;</code>
使用已弃用的接口:
<code class="php">$content = json_encode(['method' => __METHOD__, 'class' => get_called_class()]); $this->response->body($content); $this->response->type('json'); return $this->response;</code>
使用序列化视图:
<code class="php">$content = ['method' => __METHOD__, 'class' => get_called_class()]; $this->set('content', $content); $this->set('_serialize', 'content');</code>
此方法需要请求处理程序组件和适当的 URL 映射才能利用 JSON 渲染。
参考资料
有关更多信息,请参阅以下资源:
以上是如何使用 CakePHP 3.4 输出自定义 HTTP 正文?的详细内容。更多信息请关注PHP中文网其他相关文章!