【发布时间】:2021-09-27 08:51:44
【问题描述】:
我使用默认的 Laravel 异常处理程序,但我有一个关于良好实践的问题。
当我遇到控制器必须抛出异常的情况时,我会执行以下操作:
if($blah) {
abort(500, "The user should not be here");
}
然后在前端,我有一个处理错误的视图,如下所示:
@section('message', __($exception->getMessage() ?: 'Whoops, something went wrong on our servers.'))
只要我在.env 文件中有以下内容,它就可以很好地工作:
APP_DEBUG=true
每当我将此值更改为 false(在生产中应该如此)时,我在错误页面上得到的只是:Server Error 而不是我的自定义消息。
如何保留我的自定义错误消息,并在生产中使用 APP_DEBUG=false?
【问题讨论】:
-
抛出错误 500 的任何原因。查看 HTTP 错误代码 (developer.mozilla.org/en-US/docs/Web/HTTP/Status) 并正确使用它们。根据您提供的上述示例,如果用户不应该查看该页面,则抛出 404。Laravel 针对错误 500 所做的操作是正确的。 Laravel 允许您根据需要自定义错误页面 (laravel.com/docs/8.x/errors#custom-http-error-pages)。
-
@Abishek:这只是一个例子。找不到时我会抛出 404 或根据情况提供适当的代码。它仍然不会发出有关错误的“消息”。如果我尝试使用 json 获取它,也会发生同样的情况