【问题标题】:Laravel json response not showing custom object dataLaravel json响应未显示自定义对象数据
【发布时间】:2017-11-07 21:03:33
【问题描述】:

我有以下课程:

<?php
namespace App\Libraries;

use Illuminate\Contracts\Support\Arrayable;

class ErrorResponse implements Arrayable {

    private $error;

    function __construct($code, $message) {
        $this->error = array('code' => $code, 'message' => $message);
    }

    function toArray() {
        return $this->error;
    }

}

然后在控制器上我有一个响应:

$data['message'] = 'hello';
$data['error'] = new ErrorResponse($code, 'Something is bad');
return response()->json($data, $code);

在响应中,我得到以下结果:

{
  "error": {},
  "message": "hello"
}

但我期待

{
  "error": {
       "code": 422,
       "message": "Something is bad"
  },
  "message": "hello"
}

关于如何让 Laravel 响应嵌套对象 (ErrorResponse) 的内容有什么想法吗?

【问题讨论】:

  • 你要么需要实现JsonSerializable接口,要么公开$error。

标签: php json laravel laravel-5


【解决方案1】:

既然你给json() 一个纯粹的array,Laravel 只是passes it straight to json_encode。您将需要:

  1. json() 调用一个ArrayableJsonSerializable 对象,让Laravel 递归地扩展该值,
  2. $error 设为public 以便json_decode 可以使用它,或者
  3. 你自己做吧,因为你的例子很简单:

    $data['error'] = (new ErrorResponse($code, 'Something is bad'))-&gt;toArray();

【讨论】:

  • 增加接口JsonSerializable并实现为function jsonSerialize() { return $this->error; }
猜你喜欢
  • 1970-01-01
  • 2019-02-03
  • 1970-01-01
  • 2022-12-05
  • 1970-01-01
  • 2018-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多