什么是响应
控制器或路由必须向用户的浏览器返回某种响应。 Laravel 提供了简单的机制来返回字符串、数组、视图、重定向、JSON 等多种形式的响应。基本响应
返回字符串
最简单的响应就是直接返回字符串。 Laravel 会自动将其转为合适的 HTTP 响应。返回数组
若返回数组,Laravel 会自动将其转换为 JSON 格式响应。直接返回 Eloquent 模型或集合也会自动转换为 JSON 格式。这是一种非常方便构建 API 的常见模式。
返回 Eloquent 模型
Response 对象
使用response() 辅助函数可以返回带有 HTTP 状态码、请求头等详细信息的响应。
response() 的第一个参数是响应体,第二个参数是 HTTP 状态码。
常用 HTTP 状态码
视图响应
要从控制器返回 Blade 模板,请使用view()。
这是 Web 应用中最常见的响应类型。
view() 的第一个参数是视图名,第二个参数是要传给视图的数据数组。
使用 response()->view() 进行细粒度控制
若需要同时指定状态码和请求头,可使用 response()->view()。
重定向
基本重定向
redirect() 辅助函数会返回重定向响应。
表单提交后跳转到另一个页面时经常使用。
重定向到命名路由
使用route() 函数可以不直接写 URL,而通过路由名指定跳转目标。
即使 URL 发生变化也无需修改代码,因此推荐使用命名路由。
返回上一页
back() 让用户返回上一个页面,常用于校验失败后的重定向。
带闪存消息的重定向
使用with() 可以在 Session 中附带一条消息进行重定向。
适合表单提交成功后的提示。
JSON 响应
构建 API 时,使用response()->json() 返回 JSON 响应。
它会自动设置 Content-Type: application/json 头。
直接返回数组或 Eloquent 模型也会得到 JSON 响应,但
response()->json() 能更细致地控制状态码与请求头。响应头
使用header() 方法可以向响应添加 HTTP 头。
withHeaders()。
实践示例:控制器中的用法差异
下面是根据用途区分响应的示例。1
定义路由
2
实现控制器
下一步
校验
在返回响应之前,学习如何通过校验来验证输入数据。