Php 无法通过Slim获取提交的JSON POST数据

Php 无法通过Slim获取提交的JSON POST数据,php,post,slim,Php,Post,Slim,我正在使用Postman(在Chrome中)测试Slim调用,但我不知道如何获取任何发布的JSON数据 我正在提交原始JSON: {"name":"John Smith", "age":"30", "gender":"male"} 标题中的内容类型为:application/json 邮寄至: http://domain/api/v1/users/post/test/ 每次尝试获取JSON数据都会出现致命错误(请参见下面的代码注释) 我错过了什么 谢谢 确保将$app插入最后一个嵌套路由

我正在使用Postman(在Chrome中)测试Slim调用,但我不知道如何获取任何发布的JSON数据

我正在提交原始JSON:

{"name":"John Smith", "age":"30", "gender":"male"}
标题中的内容类型为:application/json

邮寄至:

http://domain/api/v1/users/post/test/
每次尝试获取JSON数据都会出现致命错误(请参见下面的代码注释)


我错过了什么


谢谢

确保将
$app
插入最后一个嵌套路由,如下所示:

// Pass through $app
$app->post('/test/', function () use ($app) {

你在其他地方都这么做,所以我假设你只是忽略了它。

你必须从请求中获得尸体:

$app->request->getBody()

试试这个:

$app->post('/test/', function () use ($app){
        instead of print_r($app->request->headers);
        $ar=$app->request->getbody(); 

       to get an array so try following..
        $arry=json_decode($ar,true);

    });

在Slim 3中,我在curl POST数据中使用了body的值,但它不起作用, 为了解决这个问题,我使用了以下方法,主体是对象而不是字符串:

$app->post('/proxy', function($request, $response) {
    $data = $request->getBody()->getContents();
    $response->getBody()->write(post('http://example.com', $data));
});

您可以在出现第一个致命错误的地方,在

Try
var\u dump($app)
中检查body上的更多方法。可能尝试使用$this而不是$app。var_dump($app)会导致空$this->request()->getBody();=致命错误:当不在对象上下文中时使用$this谢谢,但是Slim文档在组中只有“use($app)”而不是实际路由:这是因为示例在这些路由中没有使用
$app
。你只做你真正需要的咖喱。我们在这里讨论的是PHP语言需求,而不是简单的需求:“闭包也可以从父作用域继承变量。任何这样的变量都必须传递给use language构造。”这很有效!谢谢但是,天啊。这可能是我遇到的第十个问题,因为文档中的代码/信息不准确。@Ahhk:糟糕的文档可能会让人非常沮丧,但在本例中,作者假设对PHP的匿名函数有一些了解。在其他9个案例中,如果你有时间和意愿,如果你针对文档repo提出问题,那将是非常棒的:我是Slim/REST的新手,所以我只是参考了一些示例,并没有对其进行太多分析。另一个示例:文档将添加中间件的代码显示为“$app->add(new Slim\u middleware\u ContentTypes())”。这不管用。它必须和我上面的一样(经过广泛的搜索和头发拉扯)。:)
$app->post('/test/', function () use ($app){
        instead of print_r($app->request->headers);
        $ar=$app->request->getbody(); 

       to get an array so try following..
        $arry=json_decode($ar,true);

    });
$app->post('/proxy', function($request, $response) {
    $data = $request->getBody()->getContents();
    $response->getBody()->write(post('http://example.com', $data));
});