我正在进入api controllers
,我想知道这个index function
:
public function index()
{
$data = DB::table('galleries')->get();
return response()->json($data);
}
在我的api controller
必须与response()->json()
返回,或者如果它是OK的只是返回变量:
public function index()
{
$data = DB::table('galleries')->get();
return $data;
}
似乎都有效。有理由使用前者吗?
return $data
将把$data
转换成json响应。没有头文件将被设置,并且你的前端不会将其识别为json对象。
return response()
将返回一个完整的Response
实例。从doc
返回一个完整的响应实例允许你自定义响应的HTTP状态码和报头。Response实例继承自
SymfonyComponentHttpFoundationResponse
类,该类为构建HTTP响应提供了多种方法
forreturn response()->json()
method
json
方法将自动将Content-Type
头设置为application/json
,并使用json_encode
PHP函数将给定数组转换为JSON
所以这将被识别为json对象在你的前端。在laravel文档中阅读更多内容。
当你发送一些东西作为响应,而不是一个Response
的实例,那么Laravel将创建一个新的Response
实例作为内容。当响应被发送并且该对象是一个数组(或可数组)或可转换为JSON的东西时,它将作为JSON响应发送。此时,所有相关的标题将是正确的。
- 检查响应是否已经是
Response
的实例,如果不是则构造一个 - 决定响应内容是否为JSON的部分
如果你想要我的意见,那么你应该做response()->json(...)
,它创建了一个JsonResponse
实例,没有机会是含糊不清的,否则你就依赖于未记录的行为,这是可能会改变的。
似乎都是正确的,但如果你以json形式发送,它将是正式的,在前端网站,他们可以很容易地使用