【问题标题】:Laravel JSON response returns protected dataLaravel JSON 响应返回受保护的数据
【发布时间】:2014-08-07 22:05:04
【问题描述】:
return Response::json(array('status' => 'Group not found'));

返回受保护的数据。这是 JSON:

{"status":"Group not found"}

以下代码

//$jsonData - the data returned above

var_dump($jsonData);

返回这个:

对象(Illuminate\Http\JsonResponse)#320 (10) { ["jsonOptions":protected]=> int(0) ["data":protected]=> string(28) "{"status":"未找到组"}" ["callback":protected]=> NULL ["encodingOptions":protected]=> int(15) ["headers"]=> 对象(Symfony\Component\HttpFoundation\ResponseHeaderBag)#317 (5) { ["computedCacheControl":protected]=> array(1) { ["no-cache"]=> bool(true) } ["cookies":protected]=> array(0) { } ["headerNames":protected]=> array(3) { ["cache-control"]=> string(13) “缓存控制” [“内容类型”]=> 字符串(12)“内容类型” [“日期”]=> 字符串(4)“日期”} [“标题”:受保护]=> 数组(3){ [“缓存控制”]=> 数组(1){ [0]=> 字符串(8)“无缓存”} [“内容类型”]=> 数组(1){ [0]=> 字符串(16)“应用程序/json”} ["date"]=> array(1) { [0]=> string(29) "2014 年 6 月 17 日星期二 19:03:33 GMT" } } ["cacheControl":protected]=> 数组(0) { } } ["content":protected]=> string(28) "{"status":"找不到组"}" ["version":protected]=> 字符串(3) "1.0" ["statusCode":protected]=> int(200) ["statusText":protected]=> string(2) "OK" ["charset":protected]=> NULL }

看看["data":protected]=> string(28) "{"status":"Group not found"}"。数据由于某种原因受到保护,并且在我解码 JSON 时不会出现。如何“取消保护”它(使其公开可用)?

【问题讨论】:

  • 我在 Laravel 应用程序中遇到的问题与您遇到的完全相同。正如我的一位同事所说,框架让困难的事情变得简单,让简单的事情变得困难
  • 遇到同样的问题,请问您有解决办法吗?

标签: json laravel


【解决方案1】:

我认为这不是你的问题。

如果你看一下继承树:

\Symfony\Component\HttpFoundation\Response
    \Symfony\Component\HttpFoundation\JsonResponse
        \Illuminate\Http\JsonResponse

祖先 Response 类有:

public function __toString()
{
    ...
    return ... . $this->getContent();
}

所以我们跟着:

public function getContent()
{
    return $this->content;
}

可以将数据存储在成员 protected $content 中,因为当 JsonResponse 对象转换为字符串时,PHP 使用 __toString() 方法的返回值作为该对象的字符串表示形式。

【讨论】:

  • 这仍然不能解释为什么使用 json_encode 而不是 Response::json 有效。后者将数据隐藏在protected 属性下,以后在使用json_decode 解码JSON 字符串时无法访问它。
  • 我仍然认为这不是问题。为什么在将它传递给 Response::json 之后需要在服务器上进行 json_decode(这应该是路由器/控制器操作结束时的 return 语句)?
  • json_encode 是一个函数。它接受混合,它的返回值是一个字符串,它是输入的 JSON 表示。 Response::json 返回一个对象,您需要将其作为路由/操作的返回值返回。 json_encode和Response::json的区别就是函数和OOP对象的实现细节的区别。
  • 我正在为移动设备开发 API。该方法以 JSON 形式返回数据,但有时我想对 Web 应用使用相同的方法,因此我需要先对 JSON 数据进行解码。
  • 好的,很好。 json_encode 用于将数据编码为 JSON 时。 Response::json(...) 用于向客户端发送数据,设置正确的标头,将数据编码为 JSON,然后将其写入输出缓冲区。有你的答案。你的 API 应该使用 json_encode 除非它返回 JSON 给浏览器客户端......在这种情况下它应该使用 Response::json
猜你喜欢
  • 1970-01-01
  • 2011-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多