我确定我在这里错过了一些愚蠢的话。我尝试更换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
答案 0 :(得分:2)
在没有看到你的系统的情况下很难说,但是我的第一个猜测就是在你的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的单个组合优化文件中)以确定
如果您的处理程序未通过handlesException
测试
如果在那之后又有另一个处理程序添加到队列中"胜出"并发送回复。
从
开始也不会有任何伤害App::error(function()
{
exit(__FILE__);
});
然后构建你的错误处理程序,直到它被停止被调用。那样你就知道Laravel的哪个部分有问题了。
答案 1 :(得分:1)
在app/global.php
中,有一个默认的错误处理程序设置。您将要删除它以使用您的,或只是修改它。
查看此信息以获取更多信息...... http://laravel.com/docs/errors#handling-errors