HTTP 响应

未匹配的标注
本文档最新版为 6.x,旧版本可能放弃维护,推荐阅读最新版!

HTTP 响应

基础响应

所有路由和控制器都会返回一个响应并发送给用户的浏览器。 Lumen 提供了几种不同的方式返回响应。最基本的响应就是从路由或者控制器返回一个字符串:

$router->get('/', function () {
    return 'Hello World';
});

框架会自动将返回的字符串转换为一个 HTTP 响应。

响应对象

实际上,大多数时候你希望在路由和控制器方法中返回一个完整的 Illuminate\Http\Response 实例,你可以通过返回一个完整的 Response 实例来自定义返回的状态码和响应头信息。 Response 实例继承了 Symfony\Component\HttpFoundation\Response 类, 提供了一系列构建 HTTP 响应的方法:

use Illuminate\Http\Response;

$router->get('home', function () {
    return (new Response($content, $status))
                  ->header('Content-Type', $value);
});

你也可以使用更便捷的 response 助手函数来实现:

$router->get('home', function () {
    return response($content, $status)
                  ->header('Content-Type', $value);
});

注意: 想查看更多关于 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',
            ]);

其它响应类型

response 助手可以很方便的生成其它响应实例类型。使用一个 不带参数的 response 助手,可以返回一个实现 Illuminate\Contracts\Routing\ResponseFactory 的合约。这个合约提供了一些可以帮助生成响应的方法

JSON 响应

json 方法可以自动设置 Content-Type 头部为 application/json,并且将提供给它的数组用 PHP 方法 json_encode 转换为 JSON

return response()->json(['name' => 'Abigail', 'state' => 'CA']);

你可以提供状态码和一个你想附加响应头部的数组

return response()->json(['error' => 'Unauthorized'], 401, ['X-Header-One' => 'Header Value']);

如果你要创建一个 JSONP 响应,你可以用 json 方法之后添加一个 setCallback 方法,像下面这样?

return response()
            ->json(['name' => 'Abigail', 'state' => 'CA'])
            ->setCallback($request->input('callback'));

文件下载

? download 方法允许根据你提供的路径生成一个强制用户浏览器下载文件的响应。download 方法第二个参数接受一个文件名字,这将决定用户下载文件的名称。你也可以传递一个 HTTP 头部的数组作为第三个参数给这个方法?

return response()->download($pathToFile);

return response()->download($pathToFile, $name, $headers);

注意: Symfony HttpFoundation 用来管理文件下载,它要求下载的文件具有 ASCII 编码文件名。

重定向

重定向响应是 Illuminate\Http\RedirectResponse 类的实例,包含将用户重定向到另一个 URL 所需的头部。有几种方法可以生成 RedirectResponse 实例。最简单的就是用全局 redirect 辅助方法:

$router->get('dashboard', function () {
    return redirect('home/dashboard');
});

重定向一个具名路由

当你调用 redirect 辅助函数并且不传参数的时候,将返回一个Laravel\Lumen\Http\Redirector 的实例,它允许你调用Redirector 实例上的任何方法。举个例子?,生成一个RedirectResponse 到你定义的名字的路由,可以用 route 方法:

return redirect()->route('login');

如果你的路由有参数,你可以通过第二个参数传递给route方法:

     // 一个如下 URI: profile/{id} 的路由例子

return redirect()->route('profile', ['id' => 1]);

如果你重定向一个路由的时候用 "ID" 这个参数,那么有一种更流行的做法是用Eloquent模型,你只需传递模型本身。ID 将会被自动提取:

return redirect()->route('profile', [$user]);

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/lumen/5.5/http-...

译文地址:https://learnku.com/docs/lumen/5.5/http-...

上一篇 下一篇
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
贡献者:5
讨论数量: 0
发起讨论 只看当前版本


暂无话题~