HTTP 响应

更新时间: 2019-08-01 16:47

基本响应

当然,所有的路由及控制器必须返回某个类型的响应,并发送回用户的浏览器。Laravel 提供了几种不同的方法来返回响应。最基本的响应就是从路由或控制器简单的返回一个字符串:

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

指定的字符串会被框架自动转换成 HTTP 响应。

响应对象

但是,对于大多数路由和控制器行为操作,你将返回完整的 Illuminate\Http\Response 实例。 返回完整的 Response 实例允许你自定义响应的 HTTP 状态码和标题。 一个 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 且不带任何参数时,将会返回 Laravel\Lumen\Http\ResponseFactory contract 的实现。此 Contract 提供了一些有用的方法来生成响应。

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 方法的第二个参数,如下:

// For a route with the following URI: profile/{id}

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

如果你要重定向至路由且路由的参数为 Eloquent 模型的「ID」,则可以直接将模型传入, ID 将会自动被提取:

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

查看更多 Laravel 中文文档 信息

C++Primer Plus

C++Primer Plus

Stephen Prata、孙建春、韦强 / 孙建春、韦强 / 人民邮电出版社 / 2005-5 / 72.00元

C++ Primer Plus(第五版)中文版,ISBN:9787115134165,作者:(美)Stephen Prata著;孙建春,韦强译一起来看看 《C++Primer Plus》 这本书的介绍吧!

HTML 压缩/解压工具

HTML 压缩/解压工具

在线压缩/解压 HTML 代码

JSON 在线解析

JSON 在线解析

在线 JSON 格式化工具

URL 编码/解码

URL 编码/解码

URL 编码/解码