Php 标题为json的slim框架不起作用

Php 标题为json的slim框架不起作用,php,json,header,frameworks,slim,Php,Json,Header,Frameworks,Slim,大家好,我正在使用slim framework for JSON API所有响应都有效,但在标题显示text/html时,文档中提到了函数whitHeader: $app = new \Slim\App; $app->get('/new/', function (Request $request, Response $response){ $response->getBody()->write(json_encode(['message'=&g

大家好,我正在使用slim framework for 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\u h->getHeaders()时show json header(work),但在运行时使用另一个header,我跟踪了它替换header的位置,并且位于slim/slim/container.php当前函数registerDefaultServices我替换:

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

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

并尝试使用:

$ app-> response () -> header ();
$ app-> response () -> setHeader ();
在所有返回中,响应函数()不存在。

使用:

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

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

使用:

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

与PSR 7请求对象一样,PSR 7响应对象将主体实现为
\PSR\Http\Message\StreamInterface
的实例。您可以使用PSR7响应对象的
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;
});

是的!!谢谢Davide谢谢你我发现了我的错误,在我返回时我使用返回json_encode($newResponse),没有json_encode工作得很好!
<?php
$app = new \Slim\Slim();
$app->response->headers->set('Content-Type', 'application/json');
<?php
$contentType = $app->response->headers->get('Content-Type');
<?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;
});