响应

HTTP 响应

基本响应

所有的路由和控制器都应该向用户浏览器返回一些响应。Lumen 提供了多种不同的方式来返回响应。最基本的响应式从路由或控制器返回一个简单的字符串:

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

框架会自动将这个字符串转化为一个完整的 HTTP 响应。

响应对象

大部分路由和控制器操作中,都需要返回一个完整的 Illiminate\Http\Response 响应实例。并且允许你自定义响应的 HTTP 状态码和头信息。一个响应实例继承自 Symfony\Component\HttpFoundation\Response 类,提供了一些列的创建响应的方法。

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');

你也可以使用 withHeader 方法将表示头信息的关联数组添加到响应。

return response($content)
            ->withHeaders([
                'Content-Type' => $type,
                'X-Header-One' => 'Header Value',
                'X-Header-Two' => 'Header Value',
            ]);

其他响应类型

response 辅助函数也可以实现其它类型的响应。当 response 方法不带参数的情况下,将返回 Laravel\Lumen\Http\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 方法用于生成下载文件的响应,强制用户的浏览器在给定路径下下载文件。该方法接收一个文件下载后的文件名作为第二个参数,描述 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]);

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

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
上一篇 下一篇
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
贡献者:2
讨论数量: 0
发起讨论 只看当前版本


暂无话题~