POST 与 Silex 嵌套 Json

POST nested Json with Silex

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

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

我的代码适用于 action、number 和 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);
});

感谢您的帮助

其实很简单。在你解码你的 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']