【问题标题】:access HTTP PUT data in Symfony2在 Symfony2 中访问 HTTP PUT 数据
【发布时间】:2016-08-19 21:20:31
【问题描述】:

通过 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 请求中检索数据?

【问题讨论】:

    标签: php json web-services symfony httprequest


    【解决方案1】:

    你从$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 属性中。

    【讨论】:

    • 哇,这很违反直觉,但它确实有效。救生员,一旦冷却时间结束就会接受答案。 $data 是什么类型的对象? symfony2 是否有某种用于解码 json 的特殊对象?我现在明白 http 内容被视为单个字符串。
    • 不,json_decode 将返回一个标准对象,或者您可以要求它返回一个数组。请看php.net/json_decode
    • 我想知道是否要使用更复杂的 json。例如$data->company->employees->43; 或者我应该把它当作一个多维数组吗?我将了解 stdObject 是什么。
    • 如果你想从你的 JSON 中创建一个更复杂的对象,你可以创建一个类来解析这个 JSON。而 afaik PHP 无法处理 ->43,数值对象属性。
    【解决方案2】:

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

    HTTP 协议对 JSON / XML / 序列化 / 什么都一无所知。

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

    正如@slaxOr 所说,您必须从请求中获取并自己解码(可能有捆绑包可以为您完成,但我不知道)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-13
      • 2013-10-14
      • 1970-01-01
      • 1970-01-01
      • 2011-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多