- 基本回应
- 其他回应类型
- 重新导向
- 重定向到命名路由
基本回应
当然,所有路由和控制器都应返回某种响应,以将其发送回用户的浏览器。Lumen提供了几种返回响应的方法。最基本的响应只是从路由或控制器返回一个字符串:
给定的字符串将由框架自动转换为HTTP响应。$router->get('/', function () {
return 'Hello World';
});
响应对象
但是,对于大多数路由和控制器操作,您将返回完整实例。返回完整实例可让您自定义响应的HTTP状态代码和标头。一个从实例继承类,提供了多种用于构建HTTP应答的方法:Illuminate\Http\Response``Response``Response``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');
或者,您可以使用该withHeaders
方法指定要添加到响应中的标头数组:
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
方法将自动将标头设置为,并使用PHP函数将给定数组转换为JSON :Content-Type``application/json``json_encode
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文件名。
重新导向
重定向响应是该类的实例,并且包含将用户重定向到另一个URL所需的适当标头。有几种生成实例的方法。最简单的方法是使用全局帮助器方法:Illuminate\Http\RedirectResponse``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]);