laravel 学习笔记之 错误和异常

错误和异常

laravel 默认配置了一个错误和异常处理类 app\exceptions\handler 用来记录应用程序处罚的所有异常

配置

在 config\app.php 文件的 debug 选项中,开发环境 APP_DEBUG 的值应为 true,生产环境 APP_DEBUG 的值应为 false

异常处理

系统所有的异常都由 app\exceptions\handler 类处理,包含两个方法:report 和 render

report 方法

report 方法将异常信息记录日志,或者发送给第三方异常信息处理服务。如果需要处理不同类型的异常,可以使用 php 的类型运算符 instanceof

public function report(Throwable $exception)
{
    if ($exception instanceof CustomException){
        //
    }
    parent::report($exception);
}

不建议在 report 方法中进行太多的 instanceof 检查,应该使用portable & Renderable 异常

report 辅助函数

report 辅助函数允许你使用异常处理器的 report 方法在不显示错误页面的情况下快速报告异常

render 方法

render 方法将异常信息输出到浏览器展示,默认生成的是响应的基类,也可以根据不同类型的异常返回自定义响应

public function render($request, Throwable $exception)
{
    //当抛出一个 CustomException 时,返回 json 格式的 response
    if ($exception instanceof CustomException){
        return response()->json(['code'=>$exception->getCode(),'msg'=>$exception->getMessage()]);
    }
    return parent::render($request, $exception);
}

Reportable & Renderable 异常

使用 php artisan make:exception YourException 创建一个自定义异常类 YourException,可以直接在该类中定义 report 和 render 方法,框架会自动调用这些方法

//当抛出一个 CustomException 时,会自动执行 CustomException 类的 render 方法
public function render($request, Throwable $e)
{
    return response()->json(['code'=>$e->getCode(),'msg'=>$e->getMessage()]);
}

HTTP 异常

手动抛出异常

abort(404,'page not find');

创建一个 resources/views/errors/404.blade.php 视图文件,由 abort 函数引发的 HttpException 实例将作为 $exception 变量传递给视图

<h2>{{ $exception->getMessage() }}</h2>

使用 vendor:publish Artisan 命令来定义错误模板页面

php artisan vendor:publish --tag=laravel-errors
posted @ 2020-10-28 14:58  黑夜的海  阅读(388)  评论(0编辑  收藏  举报