HTTP 响应
创建响应
字符串 & 数组
所有的路由及控制器必须返回某个类型的响应,并发送回用户的浏览器。Laravel 提供了几种不同的方法来返回响应。最基本的响应就是从路由或控制器简单的返回一个字符串。指定的字符串会被框架自动转换成 HTTP 响应:
Route::get('/', function () {
return 'Hello World';
});
从路由和控制器不仅可以返回字符串,也可以直接返回数组,这个数组将会被自动转换为 JSON 响应:
Route::get('/', function () {
return [1, 2, 3];
});
提示
在路由或控制器中也可以返回 Eloquent 集合,集合将被自动转换为 JSON 数据,试一下吧。
响应对象
通常情况下,不需要从路由方法返回字符串或数组,需要的是返回完整的 Illuminate\Http\Response
实例或是一个 视图。
返回一个完整的 Response
实例时,就能够自定义响应的 HTTP 状态码以及标头。Response
实例继承了 Symfony\Component\HttpFoundation\Response
类,其提供了很多创建 HTTP 响应的方法:
Route::get('home', function () {
return response('Hello World', 200)
->header('Content-Type', 'text/plain');
});
注意
有关 Response
方法的完整列表可以参照 API 文档 以及 Symfony API 文档。
附加标头至响应
大部份的响应方法是可链式调用的,这让你可以顺畅的创建响应。举例来说,你可以在响应发送给用户之前,使用 header
方法增加一系列的标头至响应:
return response($content)
->header('Content-Type', $type)
->header('X-Header-One', 'Header Value')
->header('X-Header-Two', 'Header Value');
或者你可以使用 withHeaders
来设置数组标头:
return response($content)
->withHeaders([
'Content-Type' => $type,
'X-Header-One' => 'Header Value',
'X-Header-Two' => 'Header Value',
]);