在 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 的帮助,这让我找到了答案。
我正在使用 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 的帮助,这让我找到了答案。