2015-05-26 54 views
0

我是Silex中的新手,我尝试使用POST检索嵌套的Json数据。这是Json的一部分。与Silex POST嵌套的Json

{ 
    "action": "opened", 
    "number": 3, 
    "pull_request": { 
     "id": 35845110, 
     "number": 3, 
     "state": "open", 
     "locked": false, 
     "title": "Kie" 
    } 
} 

我的代码工作的行动,数量和pull_request,但我只是想使用pull_request数据状态,我不知道如何收集它。

$app->before(function (Request $request) { 
    if (0 === strpos($request->headers->get('Content-Type'), 'application/json')) { 
     $data =json_decode($request->getContent(), true); 
     $request->request->replace(is_array($data) ? $data : array()); 
    } 
}); 

$app->post('/api', function(Request $request) use ($app) { 

    $pullRequest = array(
     'action' => $request->request->get('action'), 
     'number' => $request->request->get('number'), 
     'pull_request' => $request->request->get('pull_request'), 
     'state' => $request->request->get('state') 
    ); 
    return $app->json($pullRequest,201); 
}); 

感谢您的帮助

回答

0

这是很简单的实际。在你解码你的json对象之后,pull_request成为一个数组,因此如果你想访问state,你首先需要参考pull_request。一种方式是所谓的array dereferencing,像这样:

'state' => $request->request->get('pull_request')['state']

但为了使用语法,您的PHP版本必须是至少5.4

您也可以将pull_request分配给一个变量,并像其他任何数组一样使用它,直到现在。

$pullRequest = $request->request->get('pull_request'); 

//.... 
'state' => $pullRequest['state'] 
+0

就是这样,谢谢老兄 – CorentinDodon