在我的laravel应用程序中,假设我有一些代码如下,作为示例
function convert_amount($amount, $currency, $date)
{
if (strlen($currency) <> 3)
{
// Exception thrown
} else {
// convert $amount from $currency on $date
}
return $amount;
}
在这里,我只是将数字从货币转换为基数。我执行一个简单的检查,看看传递的货币字符串是否是3个字符,以确保它是ISO货币代码(欧元,英镑,美元等)。如果不是,我想抛出异常,但不会导致应用程序落入错误页面,就像Laravel的错误处理程序一样。
相反,我想继续处理页面但是记录异常并可能在flash消息中显示错误。
我能为Laravel定义一个能够实现这一目标的倾听者吗?我是否需要定义一个新的异常类型NonFatelException
,这可能是逻辑。
修改
基本上,我想我可以像这样注册一个新的异常处理程序:
class NonFatalException extends Exception {}
App::error(function(NonFatalException $e)
{
// Log the exception
Log::error($e);
// Push it into a debug warning in the session that can be displayed in the view
Session::push('debug_warnings', $e->getMessage());
});
然后在我的应用中的某个地方:
throw new NonFatalException('Currency is the wrong format. The amount was not converted');
这样做的问题在于,将调用默认的异常处理程序,从而导致出现错误页面而不是将要访问的页面。 我可以在我的处理程序中返回一个值以避免默认值,但我相信这会导致单独显示返回值,而其余的脚本将无法运行。
答案 0 :(得分:0)
你走在正确的道路上。为什么不使用try...catch
tho?
你的助手方法是:
function convert_amount($amount, $currency, $date)
{
if (strlen($currency) <> 3)
{
throw new NonFatalException('Currency is the wrong format. The amount was not converted');
} else {
// convert $amount from $currency on $date
}
return $amount;
}
无论何时使用它,请将其放在try...catch
:
try {
convert_amount($amount, $currency, $date);
} catch (NonFatalException $e) {
// Log the exception
Log::error($e);
// Push it into a debug warning in the session that can be displayed in the view
Session::push('debug_warnings', $e->getMessage());
}
这样,您的应用永远不会停止,并且您在会话中收到错误消息。