在 CakePHP 3.4 中,为什么回显自定义 HTTP 正文内容会导致“无法发出标头”错误
在 CakePHP 3.4 中,回显自定义 HTTP 正文控制器方法中的内容可能会导致“无法发出标头”错误。这是因为,从 3.4 开始,会显式检查来自控制器的回显数据是否有发送的标头,如果发现任何标头,则会触发错误。
为什么会发生此更改?
在 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>
使用 Response::getBody:
<code class="php">$content = json_encode(['method' => __METHOD__, 'class' => get_called_class()]); $this->response->getBody()->write($content); return $this->response;</code>
使用序列化视图
<code class="php">$content = ['method' => __METHOD__, 'class' => get_called_class()]; $this->set('content', $content); $this->set('_serialize', 'content');</code>
此方法需要请求处理程序组件和正确的 URL 配置或请求中的 application/json Accept 标头。
结论
通过使用指定的方法而不是回显数据,可以确保发送自定义 HTTP 正文内容没有错误,并且遵循 CakePHP 的约定,从而产生更可靠和可维护的应用程序。
以上是为什么在 CakePHP 3.4 中回显自定义 HTTP 正文内容会导致'无法发出标头”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!