如何制作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' ...
]);
额外信息
问题是它在 Laravel
和 Lumen
(Laravel 的微框架)上都有效。然而,
response()->view()
不适用于 Lumen
。
我正在尝试获取 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' ...
]);
额外信息
问题是它在 Laravel
和 Lumen
(Laravel 的微框架)上都有效。然而,
response()->view()
不适用于 Lumen
。