Php 无法通过Slim获取提交的JSON POST数据
我正在使用Postman(在Chrome中)测试Slim调用,但我不知道如何获取任何发布的JSON数据 我正在提交原始JSON: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插入最后一个嵌套路由
{"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));
});