Laravel - 如何从Controller设置HTTP响应状态代码

时间:2018-02-20 02:36:25

标签: php laravel laravel-5 controller http-status-codes

我是laravel的新手,并成功地将用户从控制器引导到适当的视图,但在某些情况下我想设置一个http状态代码,但总是返回200的响应代码,无论如何我送的是什么。

以下是我的测试控制器功能的代码:

public function index()
{
    $data=array();

    return response()->view('layouts.default', $data, 201);
}

如果我在路由中使用相同的代码,它将返回正确的http状态代码,就像我在命令行中使用curl -I调用页面时所看到的那样。

curl -I http://localhost/

是否有理由说它在控制器内不起作用,但在路由呼叫中是否有效?

我确信有些东西我只是误解为新手,但即使以下代码在路线中工作但不是控制器:

public function index()
{
    abort(404);
}

我做错了什么?

1 个答案:

答案 0 :(得分:7)

解决方案

您可以使用提到的here。您将需要返回类似这样的响应:

public function index()
{
    $data=array();

    return response()->view('layouts.default', $data)->setStatusCode(404); 
}   //                                                ^^^^^^^^^^^^^^^^^^^

注意setStatusCode($integer)方法。

替代

您可以在返回视图时设置其他标头以指定其他数据,如documentation所述:

  

将标题附加到响应

     

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

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