Laravel HTTP Response 响应

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]);
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值