首页 >后端开发 >php教程 >如何使用 CakePHP 3.4 输出自定义 HTTP 正文?

如何使用 CakePHP 3.4 输出自定义 HTTP 正文?

DDD
DDD原创
2024-10-26 17:42:30811浏览

How to Output Custom HTTP Body with CakePHP 3.4?

使用 CakePHP 3.4 输出自定义 HTTP 正文

CakePHP 3.4 引入了更严格的标头处理方法,禁止在控制器内直接回显数据。尝试回显内容(如下所示)会导致错误“无法发出标头”:

<code class="php">public function test() {
    $this->autoRender = false;
    echo json_encode(['method' => __METHOD__, 'class' => get_called_class()]);
}</code>

为什么 CakePHP 抱怨

CakePHP 中不鼓励这种做法出于多种原因:

  • 它可能会导致测试环境中无法识别数据。
  • 它会干扰设置正确标头的能力。
  • 它可能会导致截断data.

正确的输出方法

发送自定义输出有两种推荐方法:

  1. 配置响应对象:

    使用 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>
  2. 使用序列化视图:

    <code class="php">$content = ['method' => __METHOD__, 'class' => get_called_class()];
    
    $this->set('content', $content);
    $this->set('_serialize', 'content');</code>

    此方法需要请求处理程序组件和适当的 URL 映射才能利用 JSON 渲染。

参考资料

有关更多信息,请参阅以下资源:

  • Cookbook:控制器>控制器操作
  • 食谱:请求和响应对象>设置身体
  • 食谱:视图> JSON 和 XML 视图
  • PHP Fig 标准:PSR-7 HTTP 消息接口

以上是如何使用 CakePHP 3.4 输出自定义 HTTP 正文?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn