Laravel 错误处理:抛出 404/403/500 异常 1 个改进

问:

如何在代码中手动抛出 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_ifabort_unlessthrow_ifthrow_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_ifabort_unlessthrow_ifthrow_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_ifabort_unlessthrow_ifthrow_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);
});

参考

本文为 Wiki 文章,邀您参与纠错、纰漏和优化
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!