Lumen 6 中文文档 响应
基本响应
所有的路由和控制器都应该向用户浏览器返回一些响应。Lumen 提供了多种不同的方式来返回响应。最基本的响应是从路由或控制器返回一个简单的字符串:
$router->get('/', function () {
return 'Hello World';
});
框架会自动将这个字符串转化为一个完整的 HTTP 响应。
响应对象
大部分路由和控制器操作中,都需要返回一个完整的 Illuminate\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]);
猜你喜欢: