【问题标题】:Laravel Exceptions handling when debug=falsedebug=false 时的 Laravel 异常处理
【发布时间】: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 获取它,也会发生同样的情况

标签: laravel exception


【解决方案1】:

如果您想针对特定视图或条件自定义 HTTP 错误,则必须查看 Rendering exceptions 部分,该部分将向您展示如何为特定异常显示自定义视图。有了这个,你可以抛出一个异常,如

throw new UserNotFoundException();

并监听该异常并根据需要呈现特定视图。

【讨论】:

    猜你喜欢
    • 2014-04-22
    • 1970-01-01
    • 1970-01-01
    • 2020-03-08
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多