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 中文文档 信息

Persuasive Technology

Persuasive Technology

B.J. Fogg / Morgan Kaufmann / 2002-12 / USD 39.95

Can computers change what you think and do? Can they motivate you to stop smoking, persuade you to buy insurance, or convince you to join the Army? "Yes, they can," says Dr. B.J. Fogg, directo......一起来看看 《Persuasive Technology》 这本书的介绍吧!

在线进制转换器

在线进制转换器

各进制数互转换器

图片转BASE64编码

图片转BASE64编码

在线图片转Base64编码工具

HEX HSV 转换工具

HEX HSV 转换工具

HEX HSV 互换工具