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

DDD
发布: 2024-10-26 17:42:30
原创
731 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!