【问题标题】:Change "Whoops, looks like something went wrong." message更改“糟糕,好像出了点问题。”信息
【发布时间】:2014-10-28 04:52:32
【问题描述】:

我确定我在这里遗漏了一些愚蠢的东西。我正在尝试替换 Laravel 在出现异常时抛出的 non-debug 错误屏幕。似乎忽略了下面的代码(放在start/global.php):

App::error(function(Exception $exception, $code)
{
    Log::error($exception);
    if(!Config::get('app.debug')) {
        return Response::view('errors.exception', ['message' => $exception->getMessage()], 500);
    }
});

它为什么会忽略它?我也应该在其他地方做点什么吗?

清楚一点:

我正在使用QueryException (HY000) 对此进行测试。但这肯定不会有什么不同吗?

使用 Laravel 4.2

【问题讨论】:

标签: php laravel exception-handling laravel-4


【解决方案1】:

如果没有看到你的系统很难说,但我的第一个猜测是在你之后对App:error 的另一个调用会覆盖你在app/global.php 中尝试执行的操作。

我刚刚写了 Laravel sets up it's error handling recently.在阅读了那篇文章(或者可能跳过它并深入研究)之后,我调试它的方式是跳到

vendor/laravel/framework/src/Illuminate/Exception/Handler.php

并查看callCustomHandlers 的定义。这是通过App:error调用任何处理程序设置的方法

protected function callCustomHandlers($exception, $fromConsole = false)
{
    foreach ($this->handlers as $handler)
    {
        //...
    }
}

您的处理程序将位于$this->handlers 数组中。我会在这个类中添加一些临时调试代码(该类可能在 Laravel 的单个组合优化文件中)来确定

  1. 如果您的处理程序未通过 handlesException 测试

  2. 如果在您“获胜”并发送响应之后,队列中添加了另一个处理程序。

开始也没有什么坏处
App::error(function()
{
    exit(__FILE__);
});

然后构建你的错误处理程序,直到它停止被调用。这样你就知道 Laravel 的哪一部分有问题。

【讨论】:

  • 我想我下午回家后试试看。
  • 对,所以我做了一个dd($this->handlers) 来查看里面有什么 - 但它是一个空数组......所以我假设它在填充 handlers 变量之前抛出了错误?跨度>
  • @MikeAnthony 这听起来很有可能。尝试 debug_print_backtrace(包装在 pre 标签中或使用 View -> Source 菜单查看)。这将为您提供错误处理程序的调用堆栈。
  • 这是一个相当混乱的转储 - 不知道如何阅读它。我可以看到它正在列出异常...只是看不到事物的顺序(也无法轻松地美化它)。例外是文件中的第一件事......
  • @MikeAnthony 尝试像这样格式化,并将其作为问题的一部分发布stackoverflow.com/questions/12555383/…(如果没有,请在 # 符号中添加换行符)
【解决方案2】:

app/global.php 中有一个默认的错误处理程序设置。您将需要删除它以使用您的,或者只是修改那个。

查看这里了解更多信息...http://laravel.com/docs/errors#handling-errors

【讨论】:

  • 谢谢,但这似乎并没有这样做......当然QueryException扩展Exception?因此,它应该与Exception 一起工作......是吗?
  • 哦,对不起,你是对的。让我换个答案。
  • 那也不行。甚至变得偏执并做了clear-compiledoptimize只是为了确保。我尝试使用两个错误处理程序(一个用于Exception,一个用于QueryException),然后再次仅使用我的QueryException)。没有运气。这可能是因为我的会话存储在数据库中——如果这有什么不同的话。
  • 澄清一下 - 我正在测试看看当数据库出现故障或被擦除时会发生什么。
  • 我没主意了。您没有在 try catch 块中抛出错误的代码吗?
猜你喜欢
  • 2017-02-24
  • 2017-04-22
  • 1970-01-01
  • 2018-01-17
  • 2022-07-13
  • 2020-04-22
  • 1970-01-01
  • 2017-10-16
  • 2017-03-12
相关资源
最近更新 更多