这篇文章主要介绍“Laravel中如何进行异常处理”,在日常操作中,相信很多人在Laravel中如何进行异常处理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Laravel中如何进行异常处理”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
基本配置
在开始研究异常处理类之前,让我们先来看看几个和异常相关且很重要的参数配置。
打开
config/app.php...
...
/*
|--------------------------------------------------------------------------
| 应用的调试模式
|--------------------------------------------------------------------------
|
| 当引用处于调试模式,将会显示错误产生式的详细堆栈信息
| 如果禁用,则只显示一个简单的错误页面
|
*/
'debug' => env('APP_DEBUG', false),
...
...从参数的名称可以猜到,如果设置为
TRUE.envAPP_DEBUG在开发环境下,建议你将它设置为
TRUE除了将错误显示在页面上,Laravel 也允许你将错误记录到日志文件中。现在,让我们来看看日志相关的配置,打开
config/app.php...
...
'log' => env('APP_LOG', 'single'),
'log_level' => env('APP_LOG_LEVEL', 'debug'),
...
...Laravel 框架中,是使用 Monolog 库来记录日志的。你可以通过上面的配置项来配置 Monolog 库。
默认的日志文件保存路径为
storage/logs/laravel.logAPP_LOG_LEVEL前面介绍了异常和日志的基本配置。
接下来,我们看看 Laravel 应用默认的异常处理类。打开
app/Exceptions/Handler.phpexpectsJson()) {
            return response()->json(['error' => 'Unauthenticated.'], 401);
        }
        return redirect()->guest(route('login'));
    }
}上面的处理类主要包含2个功能:报告和显示所有的异常信息。
让我们仔细看一眼
report/**
 * 报告或记录一个异常。
 *
 * 这是一个将异常发送给 Sentry 和 Bugsnag 等机构的好时机。
 *
 * @param  Exception  $exception
 * @return void
 */
public function report(Exception $exception)
{
    parent::report($exception);
}report 方法用于将错误记录到日志文件中。同时,关注一项重要的
dontReport接下来,我们介绍
render/**
 * 将异常渲染至 HTTP 响应值中。
 *
 * @param  IlluminateHttpRequest  $request
 * @param  Exception  $exception
 * @return IlluminateHttpResponse
 */
public function render($request, Exception $exception)
{
    return parent::render($request, $exception);
}如果说
reportrenderrender最后,
unauthenticatedAuthenticationException自定义异常类
在这一节,我们将创建一个自定义异常类,用于处理
CustomException开始着手创建一个文件
app/Exceptions/CustomException.phpview(
                'errors.custom',
                array(
                    'exception' => $this
                )
        );
    }
}重要的是需要注意
CustomExceptionException正如你看到的,在样例中我们将用户重定向至
errors.custom当然,我们需要创建一个关联的视图文件
resources/views/errors/custom.blade.phpException details: {{ $exception->getMessage() }}登录后复制
这是一个相当简单的视图文件,只显示一行错误消息,不过你也可以按照自己希望的方式设计这个视图。
我们也需要在
app/Exceptions/Handler.phpapp/Exceptions/Handler.php...
...
/**
 * 将异常渲染至 HTTP 响应值中。
 *
 * @param  IlluminateHttpRequest  $request
 * @param  Exception  $exception
 * @return IlluminateHttpResponse
 */
public function render($request, Exception $exception)
{
    if ($exception instanceof AppExceptionsCustomException)  {
        return $exception->render($request);
    }
    return parent::render($request, $exception);
}
...
...正如你所看到的,我们会在 render 方法中首先检查异常的类型。如果异常的类别是
AppExceptionsCustomException一切准备就绪。现在我们创建一个控制
app/Http/Controllers/ExceptionController.php<?php
namespace AppHttpControllers;
use AppHttpControllersController;
class ExceptionController extends Controller
{
    public function index()
    {
        // 出错了,你可以抛出自定义的异常 CustomException
        throw new AppExceptionsCustomException('Something Went Wrong.');
    }
}当然,你需要先在
routes/web.php// Exception routes
Route::get('exception/index', 'ExceptionController@index');之后,你可以浏览 http://your-laravel-site.com/exception/ind... 地址来查看是否和预期的一样。一切正常的话,页面将显示我们前面配置
errors.custom