Slim 3 getParsedBody() 始终为空和空



我正在使用Slim框架版本3,遇到了一些问题。

$app-> post('/', function($request, $response){
  $parsedBody = $request->getParsedBody()['email'];
  var_dump($parsedBody);
});

结果始终为:

你可以帮我吗?

当我切换到slimframework版本4时,我必须添加:

$app->addBodyParsingMiddleware();

否则,主体总是空的(甚至 getBody(((

这取决于您向路由发送数据的方式。这是一个 POST 路由,因此默认情况下它将期望正文数据为标准格式 ( application/x-www-form-urlencoded (。

如果要将 JSON 发送到此路由,则需要将 Content-type 标头设置为 application/json .即 curl 如下所示:

curl -X POST -H "Content-Type: application/json" 
  -d '{"email": "a@example.com"}' http://localhost/

此外,还应验证要查找的数组键是否存在:

$parsedBody = $request->getParsedBody()
$email = $parsedBody['email'] ?? false;

请尝试以下方式:

$app-> post('/yourFunctionName', function() use ($app) {
  $parameters = json_decode($app->request()->getBody(), TRUE);
  $email = $parameters['email'];
  var_dump($email);
});

希望对您有所帮助!

在 Slim 3 中,您必须为此注册一个媒体类型解析器中间件。

http://www.slimframework.com/docs/v3/objects/request.html

$app->add(function ($request, $response, $next) {
    // add media parser
    $request->registerMediaTypeParser(
        "text/javascript",
        function ($input) {
            return json_decode($input, true);
        }
    );
    return $next($request, $response);
});

相关内容

  • 没有找到相关文章

最新更新