Laravel 错误处理:抛出 404/403/500 异常
问:
如何在代码中手动抛出 404/403/500 异常?
解:抛出 403 响应
方法一、抛出 HttpException
Route::get('/403', function () {
throw new \Symfony\Component\HttpKernel\Exception\HttpException(403);
});
方法二、抛出 AccessDeniedHttpException
Route::get('/403', function () {
throw new \Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException();
});
方法三、辅助函数
Route::get('/403', function () {
abort(403);
});
除此还有
abort_if
、abort_unless
、throw_if
、throw_unless
可用哦
用 curl
查看响应的 header
状态码是否正确
curl -I http://laravel.test/403
输出:
HTTP/1.1 403 Forbidden
Server: nginx
Content-Type: text/html; charset=UTF-8
.
.
.
解:抛出 404 异常
方法一、抛出 HttpException
Route::get('/404', function () {
throw new \Symfony\Component\HttpKernel\Exception\HttpException(404);
});
方法二、抛出 NotFoundHttpException
Route::get('/404', function () {
throw new \Symfony\Component\HttpKernel\Exception\NotFoundHttpException();
});
方法三、助手函数
Route::get('/404', function () {
abort(404);
});
除此还有
abort_if
、abort_unless
、throw_if
、throw_unless
可用哦
用 curl
查看响应的 header
状态码是否正确
curl -I http://laravel.test/404
输出:
HTTP/1.1 404 Not Found
Server: nginx
Content-Type: text/html; charset=UTF-8
.
.
.
解:抛出 500 异常
方法一、抛出 HttpException
Route::get('/500', function () {
throw new \Symfony\Component\HttpKernel\Exception\HttpException(500);
});
方法二、抛出 HttpException 以外的异常
Route::get('/500', function () {
throw new \Exception();
});
方法三、助手函数
Route::get('/500', function () {
abort(500);
});
除此还有
abort_if
、abort_unless
、throw_if
、throw_unless
可用哦
用 curl
查看响应的 header
状态码是否正确
curl -I http://laravel.test/500
输出:
HTTP/1.1 500 Internal Server Error
Server: nginx
Content-Type: text/html; charset=UTF-8
.
.
.
延伸
除了以抛出异常的方式,还可以在响应中指定状态码
Route::get('/response', function () {
return response('抱歉,未找到数据!', 404);
});