通过HTTP PUT我将以下json发送到我的Web服务,由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 请求中检索数据?
你从$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将数据作为正文发送,因此请求对象不会尝试以任何方式对其进行解码,因为它可能采用多种不同的格式(JSON,XML,非标准,...)。如果您希望通过方法调用访问它get
则必须手动解码它,然后将其添加到其request
或query
属性中。
您永远不会将其作为单个参数获取,因为它不是参数。这是您必须自己解码的原始内容。
HTTP协议对JSON/XML/序列化/什么一无所知。
它只能看到一个文本字符串。
正如@slaxOr所说,您必须从请求中获取并自己解码(可能有捆绑包为您执行此操作,但我不知道它们)。