带有Header.json的slim框架不起作用


slim framework withHeader json it does not work

大家好,我使用的是JSON API的瘦框架,所有响应都有效,但在头上显示text/html,文档中提到了函数whitHeader:

    $app = new 'Slim'App;
    $app->get('/new/', function (Request $request, Response $response){
        $response->getBody()->write(json_encode(['message'=>'ok']));
        $response_h = $response->withHeader('Content-Type', 'application/json; charset=utf-8');
        return json_decode($response_h);
    });
$app->run();

使用$response_h->getHeaders()时显示json标头(工作),但当运行时获取另一个标头时,我跟踪它替换标头的位置,并位于当前函数registerDefaultServicesI replace:中的slim/slim/container.php

Headers $ headers = new (['Content-Type' => 'text / html; charset = UTF-8']);

Headers $ headers = new (['Content-Type' => 'application / json; charset = utf-8']);

但这不是最好的方法,如何更改标题?

并尝试使用:

$ app-> response () -> header ();
$ app-> response () -> setHeader ();

所有的返回都是响应函数()不存在。

使用Slim Framework v2:的官方文档

返回到HTTP客户端的HTTP响应将具有一个标头。HTTP标头是提供有关HTTP响应的元数据的键和值的列表。您可以使用Slim应用程序的响应对象来设置HTTP响应的标头。响应对象有一个公共属性headers,它是'Slim'Helper'Set;的一个实例,它提供了一个简单、标准化的接口来操作HTTP响应头。

<?php
$app = new 'Slim'Slim();
$app->response->headers->set('Content-Type', 'application/json');

您也可以从响应对象的headers属性中获取标头:

<?php
$contentType = $app->response->headers->get('Content-Type');

如果不存在具有给定名称的标头,则返回null。可以用大写、小写或带短划线或下划线的混合大小写指定标题名称。使用您最熟悉的命名约定。

使用Slim Framework v3:的官方文档

HTTP响应通常有一个正文。Slim提供了一个PSR7响应对象,使用该对象可以检查和操作最终HTTP响应的主体。

就像PSR7Request对象一样,PSR7Response对象将主体实现为'Psr'Http'Message'StreamInterface的实例。您可以使用PSR7Response对象的getBody()方法获取HTTP响应主体StreamInterface实例。如果传出HTTP响应长度未知或对于可用内存来说太大,则getBody()方法是优选的。

你的代码应该是这样的:

<?php
$app = new 'Slim'App();
$app->get('/new/', function(Request $requst, Response $response) {
    $response->getBody()->write(json_encode(['YOUR_ARRAY']));
    $newResponse = $response->withHeader(
        'Content-type',
        'application/json; charset=utf-8'
    );
    return $newResponse;
});

与Postman在我的环境中进行了测试。内容类型已更改。