我正在使用 Slim v3和 the json schema validator by justinrainbow对于我的 API。我想做但无法上类的是:
我失败的是:
# 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/