Php 更改“;哎呀,好像出了什么事。”;消息
我肯定我错过了一些愚蠢的事情。我试图替换出现异常时Laravel抛出的非调试错误屏幕。它似乎忽略了下面的代码(位于Php 更改“;哎呀,好像出了什么事。”;消息,php,laravel,exception-handling,laravel-4,Php,Laravel,Exception Handling,Laravel 4,我肯定我错过了一些愚蠢的事情。我试图替换出现异常时Laravel抛出的非调试错误屏幕。它似乎忽略了下面的代码(位于start/global.php): 为什么它会忽视这一点?我应该在别的地方也做些什么吗 澄清一下: 我正在用一个QueryException(HY000)来测试它。但这肯定不会有什么不同吗 在app/global.php中使用Laravel4.2,有一个默认的错误处理程序设置。你会想删除它来使用你的,或者只是修改它 请查看此以了解更多信息 很难说没有看到您的系统,但我的第一个猜测是
start/global.php
):
为什么它会忽视这一点?我应该在别的地方也做些什么吗
澄清一下:
我正在用一个QueryException
(HY000
)来测试它。但这肯定不会有什么不同吗
在
app/global.php
中使用Laravel4.2,有一个默认的错误处理程序设置。你会想删除它来使用你的,或者只是修改它
请查看此以了解更多信息 很难说没有看到您的系统,但我的第一个猜测是,在您的系统之后会有另一个调用
App:error
,它覆盖了您在App/global.php中尝试执行的操作
我刚刚写了关于拉雷维尔的事。在阅读了那篇文章之后(或者跳过这篇文章,投入其中),我调试这篇文章的方法是跳到
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的单个组合优化文件中),以确定
如果处理程序未通过handleexception
测试
如果队列中添加了另一个处理程序,则“获胜”并发送响应
从一开始就做一件事也没什么坏处
App::error(function()
{
exit(__FILE__);
});
然后构建错误处理程序,直到停止调用为止。这样你就知道拉威尔有什么问题了 谢谢,但那似乎不行。。。当然QueryException
扩展了Exception
?因此,无论如何,它都应该与异常一起工作。。。是吗?哦,对不起,你说得对。让我改变答案,这也不行。甚至变得偏执,并做了清除编译
和优化
以确保安全。我尝试使用两个错误处理程序(一个用于Exception
,另一个用于QueryException
),然后再次仅使用我的QueryException
)。不走运。这可能是因为我的会话存储在数据库中——如果这有什么区别的话。澄清一下——我正在测试数据库崩溃或被删除时会发生什么。我没有主意了。你没有在try-catch块中抛出错误的代码,是吗?我想我今天下午回家后会尝试一下。对,所以我做了一个dd($this->handlers)
来看看里面有什么-但它是一个空数组。。。所以我假设它是在填充处理程序变量之前抛出错误的?@MikeAnthony这听起来很有可能。尝试调试\u打印\u回溯(包装在预标记中或使用查看->源菜单查看)。这将为您提供错误处理程序的调用堆栈。这是一个相当混乱的转储-不知道如何读取它。我可以看到它列出了例外情况,尽管。。。只是看不到事物的顺序(也不能轻易地美化它)。例外是文件中的第一件事,尽管…@MikeAnthony尝试将其格式化为这样,并将其作为您问题的一部分发布(如果您没有符号,请在符号中添加新行),我花了很长时间才找到覆盖该消息的正确方法。答案如下:
App::error(function()
{
exit(__FILE__);
});