Slim 3 getParsedBody()始终为null且为空

时间:2017-02-13 07:40:03

标签: php null slim slim-3

我正在使用 Slim Framework第3版并遇到一些问题。

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

结果总是:

  

你能帮助我吗?

4 个答案:

答案 0 :(得分:2)

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

如果要将JSON发送到此路由,则需要将Content-type标头设置为application/json。即卷曲看起来像:

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

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

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

答案 1 :(得分:2)

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

$app->addBodyParsingMiddleware();

否则,主体始终为null(甚至是getBody())

答案 2 :(得分:1)

请尝试这样:

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

我希望这可以帮到你!

答案 3 :(得分:1)

在Slim 3中,您必须为此注册一个Media-Type-Parser中间件。

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