Laravel8 快速入门教程十六 - 校验层错误处理

97 阅读2分钟

本文由 简悦 SimpRead 转码, 原文地址 juejin.cn

「这是我参与 11 月更文挑战的第 8 天,活动详情查看:2021 最后一次更文挑战

背景

  1. 项目用 Thinkphp5.1 开发完成,对于各种关系模型的查询 Tp 处理起来还是比较吃力的。
  2. 作为努力奔跑的程序员,下一个项目我们决定用 Lavarel 进行开发。
  3. 因为掘金粑粑有奖励,所以把部分 gitee 上的私有的部分学习笔记整理一下。

说明

Laravel 属于中大型框架,各种功能都被内置了,而且 Laravel 官方的文档看的我是云里雾里的,对于新手感觉不是很友好。所以此系列文章只适合有 PHP 基础。想快速入门搞开发的

正文

上一篇文章我们把问题进行了分析。这里我们写具体代码。

创建文件 app\Exceptions\ValidateException.php

<?php
/**
 * [验证错误统一处理] 
 * Author Liiy. 
 * Date 2021/11/14. 
 * Time 21:10. 
 */

namespace App\Exceptions;

use Exception;

class ValidateException extends Exception{

    protected $code = 203;  // 定义错误码
}
复制代码

code 属性是为了替换父类中的 状态码

这是默认的异常处理类,然后我们在统一的异常处理中定义当前异常抛出错误的方式。

app\Exceptions\Handler.php

    /**
     * 统一异常处理
     */
    public function render($request, Throwable $exception){

       //验证器异常
       if($exception instanceof ValidateException){
            return response()->json([
                'code'=>$exception->getCode(),
                'msg'=>$exception->getMessage()
            ]);
        }

        return parent::render($request, $exception);
    }
复制代码

这里重写了 render 方法,并定义了 ValidateException 类的异常处理方式,这就像是一个漏斗一样。如果找到我们定义的,那就按照定义好的规则处理异常,如果没有定义。则按照父类给出的方法对异常进行处理。

此时我们在 app\Http\Validate\BaseValidate.php 文件中把之前的异常处理方式替换成 Validate 的方式。

定义好以后我们再次访问刚才的方法

此时的 code 是我们在 ValidateException 中定义的 code,错误信息是我们创建 ValidateException 中构造方法传入的。

总结

面向对象中,父类要做的就是处理好很多逻辑。我们只需要继承,直接去使用响应的方法就行。

这是一种面向对象的编程思想,可能你第一遍不懂,第二遍不懂,那就照葫芦画瓢。画一遍就思考一遍。慢慢就会理解了。很多框架,底层也是给我门都做好了很多东西,我们只需要继承,学会使用即可。