访问Symfony2中的HTTP PUT数据

时间:2016-04-26 07:36:23

标签: php json web-services symfony httprequest

通过HTTP PUT我将以下json发送到我的网络服务,由return new Response($request->getContent());验证:

{"company_id":13}

在我的网络服务中,我试图通过请求中的标记检索数据:

var_dump("COMPANY ID ".$request->request->getInt('company_id')); //returns 0

我也尝试过:

//the 2 below should only work on GET from what I read
var_dump("COMPANY ID ".$request->get('company_id')); //returns nothing
var_dump("COMPANY ID ".$request->query->getInt('company_id')); //returns 0

symfony2本书仅提到如何从GET和POST获取数据,如何从PUT请求中检索数据?

2 个答案:

答案 0 :(得分:5)

你是从$request->getContent()获得它,只是json_decode它,你应该得到一个对象,这样你就可以访问它了。例如:

$data = json_decode($request->getContent());
var_dump("COMPANY ID " . $data->company_id);

编辑以添加更多解释。

Symfony Http Foundations get方法基本上只是$request->attributes->get$request->query->get$request->request->get的“别名”,所以如果一个返回0或false,或者其他什么,很可能另一个也是。

由于HTTP PUT将数据作为主体发送,因此Request对象不会尝试以任何方式解码它,因为它可能有多种不同的格式(JSON,XML,非标准,......)。如果您希望通过get方法调用来访问它,则必须手动对其进行解码,然后将其添加到requestquery属性中。

答案 1 :(得分:1)

您永远不会将其作为单个参数获取,因为它不是参数。这是一个原始内容,你必须自己解码。

HTTP协议对JSON / XML /序列化等等一无所知。

它只能看到一个文本字符串。

正如@slaxOr所说,你必须从请求中获取并自行解码(可能有捆绑包为你做,但我不知道它们。)