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

ken*_*in9 3 exception-handling exception abort laravel-5.1

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

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

Ben*_*old 6

我们来看看代码:

/**
 * 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);
}
Run Code Online (Sandbox Code Playgroud)

所以看起来该abort方法只是一个帮助器,NotFoundHttpException如果代码404被传递则抛出一个,否则抛出一个HttpException.

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

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