如何制作Laravel 5 return 404状态码

How to make Laravel 5 return 404 status code

我正在尝试获取 Laravel 5 (5.1.31) 到 return 找不到页面时的 404 HTTP 状态响应。我尝试了几种方法,它总是 returns 200。

在我的控制器中我有这个:

else
   {
   header('HTTP/1.0 404 Not Found');
   return view('errors.404);
   }

我也试过:

else
   {
   http_response_code(404);
   return view('errors.404);
   }

else
   {
   abort(404, 'Page not found');
   }

我也试过把这个放在 404.blade

@inject( 'response', 'Illuminate\Http\Response' )
{{ $response->status(404) }}

没有成功。无论我尝试什么,Laravel returns 200。我如何得到它到 return 404?

很简单,我假设你使用 Laravel v5++ 就去

app > Exceptions > Handler.php

见下图:

并修改以下代码:

public function render($request, Exception $e)
{
    return parent::render($request, $e);
}

public function render($request, Exception $e)
{
    if ($e instanceof MethodNotAllowedHttpException)
    {
        abort(404);
    }
    return parent::render($request, $e);
}

然后,不要忘记在 errors 文件夹中添加 404.blade.php 页面:

嗯,404.blade.php中的404页面你可以自己定制。


备注

只有当您 运行 URL 未在路线中列出时才会出现这种情况。您可以在 web.php 文件中找到。

如果您需要自定义调用,只需像下面这样在控制器中调用:

public function show_me()
{
   abort(404);  //404 page
}

希望对您有所帮助!

虽然我不知道为什么 abort 没有像预期的那样 return 进入 404 状态,但我确实找到了一个解决方案,可以使 Laravel return 成为 404状态:

这是我所做的:

else {
    $data['title'] = '404';
    $data['name'] = 'Page not found';
    return response()->view('errors.404',$data,404);
}

这实际上更适合我的目的,因为它不会像中止那样弄乱我的 404.blade 的内容。

您可以使用中止助手:

abort(404);

如果你想 return JSON 而不是视图,你可以在你的控制器中调用它:

return response(['error'=>true,'error-msg'=>$msg],404);

如果你有一个那么就做一个

return view('errors.404');

或喜欢

abort(404);

这就是我所做的,因为我需要使用我的自定义视图和 404 header:

return response()
            ->view('my_view', $data, 404);

我在 https://laravel.com/docs/8.x/responses#view-responses

上找到了它

它在 Laravel 8 中有效,但它似乎在旧版本中有效。

你也可以这样做

return response(view('view_name'), 404);

您也可以像这样将 headers 添加到响应中

return response(view('view_name'), 404, [
    'header_1' => 'header 1 value',
    'header_2' => 'header 2 value' ...
]);

额外信息

问题是它在 LaravelLumen(Laravel 的微框架)上都有效。然而,

response()->view() 

不适用于 Lumen