我在一起使用Stripe API和Laravel。如果Stripe检测到对信用卡进行收费的错误(例如使用一个抛出无效安全码错误的测试信用卡号码),则API绑定应该抛出一个异常,它们确实会这样做。问题是,在Laravel抛出错误500页之前,我遇到了捕获异常的问题(我试图用错误消息代替执行重定向)。
我写的代码可在Pastebin: http://pastebin.com/ZaW2xbbt
我期望的行为是让catch
触发并执行重定向,但相反,我得到了带有消息和"未处理的异常"的堆栈跟踪。这让我很困惑,因为我正在处理异常。
像$customer
这样的变量是有效的,并且已经在前面定义过了。知道是怎么回事吗?
对于任何未来的观众,这里有一篇关于laravel 4错误处理的文章。
Laravel 4允许您通过异常类型捕获异常。例如,你可以处理Symfony的HttpException
和它的子类添加到你的代码:
// Catch HttpException, NotFoundHttpException, etc etc
App::error(function(HttpException $exception, $code, $fromConsole)
{
...
});
Symfony HttpExceptions(在Laravel中使用)可以在这里找到。
你也可以在ServiceProvider中抛出:
<?php namespace My'Namespace;
use Illuminate'Support'ServiceProvider;
use Symfony'Component'HttpKernel'Exception'HttpException;
class MyServiceProvider extends ServiceProvider {
public function register()
{
$this->app->error(function(HttpException $exception, $code, $fromConsole)
{
...
});
}
}
希望有帮助!
一般情况下,Laravel记录的所有错误都记录在storage/logs
文件夹
无论如何,500错误可能是语法/解析错误,在这种情况下,当错误发生时,Laravel框架可能还没有加载,如果是这样,Laravel不会处理异常。
在这种情况下,你应该以某种方式访问apache/vargrant/whatif php错误日志(取决于你的服务器能力和配置),在我个人的情况下,我已经配置服务器将日志放在/storage/logs/error_log.txt
文件中,这样我就可以像访问其他Laravel服务器日志一样访问它们
注意,在Laravel 5中,您有app/Exceptions/Handler.php
作为自定义异常处理/报告的入口点
https://laravel.com/docs/5.7/errors异常处理器