Laravel7.15.0学习中遇到的坑—错误和异常

前言:

最近在学习 laravel 框架,学习的版本是 7.15.0 ,记录一下学习过程中遇到的问题和难点以及一些总结。

错误和异常

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值