继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

实战:Thinkphp+MySQL电影点播系统04-验证器与自定义异常

Caeser110
关注TA
已关注
手记 139
粉丝 31
获赞 154

前言

每天上班下班,让生活更充实,让自己的工作更具挑战,生活每天都要充满激情,因为我们的好奇心,因为我们的求知欲,我们的生活和工作变得那么的多彩。
图片描述

验证器

这里有一个验证器的概念,就是对传参进行校验,不符合则不进行处理,用 tp5 里自带的验证器,我觉得是很必要的,前端 JavaScript 是可以校验,但是我认为后台也必须要校验一次,不能对客户端传来的参数过分相信,所以服务端也要校验一次。
而且以面向对象的姿态来创建这个验证器,所以在本系统里很容易见到一个基类,而这个基类是继承自 tp5 自带的一个类,这样方便扩展,也体现了面向对象的一个特性:继承。

<?php
class BaseValidate extends Validate
{
    public function goCheck(){
        //获取 当前请求信息
        $request=Request::instance();
        //获取 请求参数数组
        $params=$request->param();
        //批量验证
        $result=$this->batch()->check($params);
        if(!$result){
            $e=new ParameterException([
                'msg'=>$this->error,

            ]);
            throw $e;
        }else{
            return true;
        }
    }
    protected function isPositiveInteger($value,$rule='',$data='',$field=''){
        if(is_numeric($value)&&is_int($value+0)&&($value+0)>0){
            return true;
        }else{
            return false;
        }
    }
}

要点:获取参数的方式是 Request::instance(),然后批量验证,验证是通过 protected $rule 规则实现,验证 BaseValidate 里自定义规则

protected $rule=[
        'id'=>'require|isPositiveInteger'
    ];
    protected $message=[
        'id'=>'id参数必须是正整数'
    ];

自定义异常

首先需要配置好 config.php 文件,我们创建一个 ExceptionHanler 来覆盖 tp5 自带异常机制。
修改 config.php 的第159行

// 异常处理handle类 留空使用 \think\exception\Handle
’exception_handle’ => ‘app\lib\exception\ExceptionHandler’,

然后重写 render 方法,可以自定义错误状态码,错误提示信息,以及错误的 URL 。
修改 config.php 34行,开启返回值为 JSON

// 默认输出类型
’default_return_type’ => ‘json’,

自定义异常的好处

好处就是返回值,对前端友好,提供简明扼要的信息,提供自定义错误,不提示一些系统自带的参数和报错,提供系统的安全性。
也有缺点,缺点就是,如果产生报错了,可能看不到必要的信息,不方便调试,必要的时候,还是需要调试代码的。

总结

图片描述
不知道你们对 PHP 里的 “=>”这样的箭头是否适应,反正我觉得怪怪的,可能写得实在是太少了吧。不过必须要夸夸 PHP ,开发速度确实很快,还不用在线下载 JAR 包,想想都觉得舒服,给我感觉是很迅速可以实现目标的代码,整体都很轻便。
本次项目我是 SSM 框架与 Thinkphp5 框架同时写的,有很明显的对比,代码量一开始就有很大区别,PHP 里我没有写 SQL 语句,我没有写 getter 和 setter,我甚至都不用一个个挑选返回值,运用一个 protected 就能控制返回的 JSON 串里是否需要输出我想要的。
目前来讲,PHP 还是有很大优势的,至少是短期的,少迭代的项目,完全可以考虑 PHP 开发。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP