在 Silex RESTful API 中获取 POST body 数据

Get POST body data in Silex RESTful API

我正在使用 Silex 创建 RESTful API。为了测试我正在使用 Chrome 的 "Simple REST Client" 插件。

在插件中,我将 URL 设置为:http://localhost/api-test/web/v1/clients 我将 "method" 设置为:POST 我将 "headers" 留空 我将 "data" 设置为:name=whatever

在我的 "clients.php" 页面中我有:

require_once __DIR__.'/../../vendor/autoload.php';
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

$app = new Silex\Application();

$app->post('/clients', function (Request $request) use ($app) {
  return new Response('Created client with name: ' . $request->request->get('name'), 201);
}

在插件中,输出显示:"Status: 201"(正确),一堆headers,和"Data: Created client with name: "(应该是"Data: Created client with name: whatever"

我做错了什么?我也试过:$request->get('name')

谢谢。

需要三个步骤来解决:

1) 在 "Simple Rest Client" 中将 "Headers" 设置为:

Content-Type: application/json

2) 将 "Data" 更改为:

{ "name": "whatever" }

3) 在 Silex 中添加将输入转换为 JSON 的代码,如 http://silex.sensiolabs.org/doc/cookbook/json_request_body.html:

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

然后我可以使用 PHP 代码访问数据:

$request->request->get('name')

谢谢@xabbuh 的帮助,这让我找到了答案。