我正在使用Silex创建RESTful API。测试我正在使用Chrome的“简单REST客户端”插件。
在插件中,我将网址设置为:http://localhost/api-test/web/v1/clients 我将“方法”设置为:POST 我把“标题”留空了 我将“数据”设置为: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”(正确),一堆标题和“Data:Created client with name:”(它应该说“Data:Created client with name:whatever”< / p>
我做错了什么?我也尝试过:$ request-&gt; get('name')
谢谢。
答案 0 :(得分:3)
需要三个步骤来解决:
1)&#34;简单休息客户&#34;设置&#34; Headers&#34;到:
Content-Type: application/json
2)更改&#34;数据&#34;到:
{ "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的帮助,这让我得到了答案。