我肯定这里遗漏了一些愚蠢的东西。我试图替换Laravel在出现异常时抛出的非调试错误屏幕。它似乎忽略了下面的代码(放在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
很难说没有看到您的系统,但我的第一个猜测是在您的系统之后对App:error
进行了另一个调用,它覆盖了您在app/global.php
中尝试执行的操作。
我最近刚刚写了一篇关于Laravel如何设置它的错误处理的文章。在阅读了那篇文章(或者可能跳过它并深入研究)之后,我调试这篇文章的方法是跳到
vendor/laravel/framework/src/Illuminate/Exception/Handler.php
并考察CCD_ 6的定义。这是通过App:error
调用任何处理程序设置的方法
protected function callCustomHandlers($exception, $fromConsole = false)
{
foreach ($this->handlers as $handler)
{
//...
}
}
您的处理程序将在$this->handlers
数组中。我会在这个类中添加一些临时调试代码(该类可能在Laravel的单个组合优化文件中)来确定
如果您的处理程序未通过
handlesException
测试如果在您的"获胜"并发送响应之后,队列中添加了另一个处理程序。
从开始也不会有什么坏处
App::error(function()
{
exit(__FILE__);
});
然后构建错误处理程序,直到它停止被调用。这样你就知道拉拉威尔有什么问题了。
在app/global.php
中有一个默认的错误处理程序设置。你会想要删除它来使用你的,或者只是修改它。
查看此以了解更多信息。。。http://laravel.com/docs/errors#handling-错误