Laravel 5.1 - 抛出异常和中止之间的区别()

时间:2016-01-14 23:34:12

标签: exception exception-handling laravel-5.1 abort

当我想在后端处理期间暂停操作时,我一直在抛出异常。我忘记了我可以使用Laravel abort()方法。有没有理由使用abort()而不是抛出异常?它几乎做同样的事情吗?

我也在问,因为我注意到,当我拖尾我的日志时,abort()没有显示堆栈跟踪,但是抛出异常。在这些情况下我不需要堆栈跟踪,因为我知道它为什么失败了。我也不希望日志从这些已知的失败中大量增长。

1 个答案:

答案 0 :(得分:5)

让我们来看看代码:

/**
 * Throw an HttpException with the given data.
 *
 * @param  int     $code
 * @param  string  $message
 * @param  array   $headers
 * @return void
 *
 * @throws \Symfony\Component\HttpKernel\Exception\HttpException
 * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
 */
public function abort($code, $message = '', array $headers = array())
{
    if ($code == 404)
    {
        throw new NotFoundHttpException($message);
    }

    throw new HttpException($code, $message, null, $headers);
}

所以看来abort方法只是一个助手,如果传递代码NotFoundHttpException则抛出404,否则会抛出HttpException

我不确定为什么在使用Exception时抛出abort()会导致日志记录。您可能希望检查异常处理程序,并查看是否以不同方式捕获和处理不同类型的异常。

您不应该担心日志文件的大小。这些天存储非常便宜,文本占用空间非常小。您从日志中获得的知识将远远超过其实际成本。