2015-05-26 117 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