gpt4 book ai didi

rest - Slim - 修改中间件内的 POST 请求正文

转载 作者:行者123 更新时间:2023-12-04 13:39:22 27 4
gpt4 key购买 nike

我正在使用 Slim v3the json schema validator by justinrainbow对于我的 API。我想做但无法上类的是:

  • 在中间件中:使用默认值验证传入的 json。这会产生一个修改过的对象
  • 将修改后的对象写回到请求中,以便核心 Controller 可以处理它

  • 我失败的是:
    # inside middleware:
    $requestbody = $request->getBody();
    $requestobject = json_decode($requestbody);
    # validation and modification of $requestobject takes place here
    $request->getBody()->write(json_encode($requestobject));
    $request->reparseBody();
    return $next($request, $response);

    从那时起,请求正文只是 null .我究竟做错了什么?我很确定我修改 Slim 对象的方式有问题,因为当我手动尝试时它不起作用 $request->getBody()->write('{"some": "content"}')以及。

    最佳答案

    解决方案是 withParsedBody() :

    # inside middleware:
    $requestbody = $request->getBody();
    $requestobject = json_decode($requestbody);

    # validation and modification of $requestobject takes place here

    $request = $request->withParsedBody($requestobject);
    return $next($request, $response);

    正如我需要的那样,它用修改后的对象完全覆盖了请求正文。你需要注意的是:
  • 从那时起,请求将保存一个解析的对象作为正文并在调用 $request->getParsedBody() 时。如果我正确理解来源,它不会被重新解析
  • 通话中 $request->getParsedBody()如果主体是 JSON,你通常会得到一个关联数组,但使用上面的代码片段,解析后的主体将是一个对象。

  • 愿该片段将来对用户有所帮助。

    关于rest - Slim - 修改中间件内的 POST 请求正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45039193/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com