【问题标题】:slim framework withHeader json it does not work带有Header json的苗条框架它不起作用
【发布时间】:2016-03-28 00:52:59
【问题描述】:

大家好,我使用的是 JSON API 的苗条框架,所有响应都可以工作,但是在标题显示文本/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 header(work) 但是当运行需要另一个标头时,我跟踪它替换标头的位置并且在 slim / slim / container.php 正好在当前函数 registerDefaultServices 我替换:

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 ();

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

【问题讨论】:

    标签: php json header frameworks slim


    【解决方案1】:

    使用official documentation for 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。您可以使用大写、小写或带有破折号或下划线的混合大小写来指定标题名称。使用您最熟悉的命名约定。

    使用official documentation for Slim Framework v3

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

    就像 PSR 7 请求对象一样,PSR 7 响应对象将主体实现为\Psr\Http\Message\StreamInterface 的实例。您可以使用 PSR 7 响应对象的 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 的环境中进行了测试。内容类型已更改。

    【讨论】:

    • 是的!谢谢 Davide,谢谢你,我发现了我的错误,在我返回时我使用 return json_encode($newResponse),没有 json_encode 可以完美地工作!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-22
    • 1970-01-01
    • 2015-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多