• 基本回应
  • 其他回应类型
  • 重新导向
    • 重定向到命名路由

      基本回应

      当然,所有路由和控制器都应返回某种响应,以将其发送回用户的浏览器。Lumen提供了几种返回响应的方法。最基本的响应只是从路由或控制器返回一个字符串:
      1. $router->get('/', function () {
      2. return 'Hello World';
      3. });
      给定的字符串将由框架自动转换为HTTP响应。

      响应对象

      但是,对于大多数路由和控制器操作,您将返回完整实例。返回完整实例可让您自定义响应的HTTP状态代码和标头。一个从实例继承类,提供了多种用于构建HTTP应答的方法:Illuminate\Http\Response``Response``Response``Symfony\Component\HttpFoundation\Response
      1. use Illuminate\Http\Response;
      2. $router->get('home', function () {
      3. return (new Response($content, $status))
      4. ->header('Content-Type', $value);
      5. });
      为了方便起见,您还可以使用response助手:
      1. $router->get('home', function () {
      2. return response($content, $status)
      3. ->header('Content-Type', $value);
      4. });

      注意:有关可用Response方法的完整列表,请查看其API文档Symfony API文档

将标题附加到响应

请记住,大多数响应方法都是可链接的,可以流畅地构建响应。例如,您可以使用此header方法在将响应发送回用户之前向响应添加一系列标题:

  1. return response($content)
  2. ->header('Content-Type', $type)
  3. ->header('X-Header-One', 'Header Value')
  4. ->header('X-Header-Two', 'Header Value');

或者,您可以使用该withHeaders方法指定要添加到响应中的标头数组:

  1. return response($content)
  2. ->withHeaders([
  3. 'Content-Type' => $type,
  4. 'X-Header-One' => 'Header Value',
  5. 'X-Header-Two' => 'Header Value',
  6. ]);

其他回应类型

response辅助可用于方便地生成其它类型的反应的实例。在response没有参数的情况下调用帮助器时,将返回该类的实现。此类提供了一些有用的方法来生成响应。Laravel\Lumen\Http\ResponseFactory

JSON回应

json方法将自动将标头设置为,并使用PHP函数将给定数组转换为JSON :Content-Type``application/json``json_encode

  1. return response()->json(['name' => 'Abigail', 'state' => 'CA']);

您可以选择提供状态代码和其他标头数组:

  1. return response()->json(['error' => 'Unauthorized'], 401, ['X-Header-One' => 'Header Value']);

如果您想创建一个JSONP响应,则json除了可以使用该方法setCallback

  1. return response()
  2. ->json(['name' => 'Abigail', 'state' => 'CA'])
  3. ->setCallback($request->input('callback'));

档案下载

download方法可用于生成强制用户浏览器在给定路径下载文件的响应。该download方法接受文件名作为该方法的第二个参数,该参数将确定下载文件的用户看到的文件名。最后,您可以将HTTP标头数组作为该方法的第三个参数传递:

  1. return response()->download($pathToFile);
  2. return response()->download($pathToFile, $name, $headers);

注意:管理文件下载的Symfony HttpFoundation要求下载的文件具有ASCII文件名。

重新导向

重定向响应是该类的实例,并且包含将用户重定向到另一个URL所需的适当标头。有几种生成实例的方法。最简单的方法是使用全局帮助器方法:Illuminate\Http\RedirectResponse``RedirectResponse``redirect

  1. $router->get('dashboard', function () {
  2. return redirect('home/dashboard');
  3. });

重定向到命名路由

当您redirect不带参数调用助手时,将返回的实例,从而允许您在实例上调用任何方法。例如,要生成一个到命名路由,可以使用以下方法:Laravel\Lumen\Http\Redirector``Redirector``RedirectResponse``route

  1. return redirect()->route('login');

如果您的路线具有参数,则可以将它们作为方法的第二个参数传递route

  1. // For a route with the following URI: profile/{id}
  2. return redirect()->route('profile', ['id' => 1]);

如果要重定向到Eloquent模型中填充的带有“ ID”参数的路由,则可以简单地传递模型本身。该ID将自动提取:

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