在测试Silex REST服务时如何传递Content-Type标头?

时间:2015-03-06 14:47:26

标签: php rest symfony silex

我正在按照here的说明测试Silex REST服务,但也试图自动解码JSON数据,这也解释了in the manual,但不知怎的,它无法创建$ data参数。

在我的测试中,我用以下方式调用服务:

$data = file_get_contents(__DIR__.'/resources/billing-info.json');
$client->request('POST', '/users/test_user/bills',array(), array(), array('Content-Type' => 'application/json'), $data);

在Controller中我尝试以

的形式访问未编组的数据
$app->post('/users/{username}/bills', function(Request $request, $username) use($app) {
try {
   $myData = $request->data;
   .....
} catch (Exception $e){
   return $app->json(array('error'=>$e->getMessage()),$e->getCode());
}
});

但$ data数据不存在。我做错了什么?

2 个答案:

答案 0 :(得分:1)

您需要将Content-Type更改为CONTENT_TYPE。如果查看Client类的source code,您会发现$server参数需要与$ _SERVER超全局给出的键匹配。内容类型标头存储在CONTENT_TYPE密钥中。

$client->request('POST', '/users/test_user/bills',array(), array(), array('CONTENT_TYPE' => 'application/json'), $data);

答案 1 :(得分:0)

查看Request-Object上的文档。我想而不是$myData = $request->data;它必须是:

$myData = $request->getContent();