繁体   English   中英

Laravel - 如何从控制器设置 HTTP 响应状态代码

[英]Laravel - How to set HTTP response status code from Controller

我是 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);
}

我做错了什么?

解决方案

您可以使用这里提到的内容。 您将需要返回这样的响应:

public function index()
{
    $data = ['your', 'data'];

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

注意setStatusCode($integer)方法。

替代品

您可以在返回视图时设置额外的标题以指定额外的数据,如文档所述:

将标题附加到响应

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM