如果我比较Laravel的5.2和5.3文档,5.3文档似乎鼓励只返回一个包含数据的数组,该数据将自动转换为JSON响应(内容类型 “应用程序/ JSON”)。我注意到从控制器返回一个数组,将返回未转义的JSON。
return ['country_id' => $countryId, 'iso2' => 'EG', 'iso3' => 'EGY', 'country_name' => $countryName, 'name' => 'EGYPT', 'active' => 1, 'published' => 1];
返回
[{"country_id":63,"iso2":"EG","iso3":"EGY","country_name":"Egypt","name":"EGYPT","active":1,"published":1}]
但显式地将PHP数组转换为带有 json_encode()的JSON字符串并将其作为响应返回,返回转义的JSON。
return response()->json(json_encode(['country_id' => $countryId, 'iso2' => 'EG', 'iso3' => 'EGY', 'country_name' => $countryName, 'name' => 'EGYPT', 'active' => 1, 'published' => 1]));
返回
[{\"country_id\":63,\"iso2\":\"EG\",\"iso3\":\"EGY\",\"country_name\":\"Egypt\",\"name\":\"EGYPT\",\"active\":1,\"published\":1}]
有没有理由使用更冗长的返回方式(我不是在客户端使用eval,只有JSON.parse()将未转义和转义的JSON转换为相同的javascript对象)?
答案 0 :(得分:1)
有两点:
框架将自动将数组转换为JSON响应
喜欢:
Route::get('/', function () {
return [1, 2, 3];
});
json方法将自动将Content-Type标头设置为application / json,并使用json_encode PHP函数将给定的数组转换为JSON
喜欢:
return response()->json([
'name' => 'Abigail',
'state' => 'CA'
]);
两种方法都对,但是您获得了转义代码,因为您两次使用了json_encode()
,一种是因为response()->json()
根据文档在内部使用了该函数,另一种是在该函数中的代码中明确声明:response()->json(json_encode(...))
,删除内部的json_encode
才能正常工作。
我已经测试了这两种样式,并且接收到的标头是相同的,所以我认为使用显式response()->json()
而不是仅返回一个数组作为优先事项,只要您使用实现该功能。似乎5.2及以下版本没有。