专栏首页浪子编程走四方ThinkPHP自定义验证类规则

ThinkPHP自定义验证类规则

背景描述

在使用ThinkPHP的过程中,发现这样一个问题。有时候我们要验证一个参数的格式是否正确,然而ThinkPHP内置的验证规则却没有,那只有去自定义函数了。今日在研究框架底层时,特意去研究了一下框架的验证底层逻辑,便总结下来(使用的框架是ThinkPHP5.1.37版本的)。由于内容很简单,很多东西都在下面的两段代码,因此本文的文字内容基本是废话,主要看代码,主要看代码,主要看代码。

代码实践

.控制器代码

//****** 该函数为控制器中的代码    
/**
 * 测试自定义验证方法
 */
public function index()
{
    $id           = '1a';
    //****** 该验证类为你自定义的验证类,需要使用use进来,具体内容见下方  
    $testValidate = new TestValidate();
    $result       = $testValidate->check(['id' => $id]);
    if ($result) {
        // 这里写自己的具体业务逻辑
        echo '参数验证通过';
    } else {
        // 获取验证信息
        dump($testValidate->getError());
    }
}

.验证类代码

//****** 该函数为控制器中的代码  
use think\Validate;

class TestValidate extends Validate
{
    // 设置验证规则(这里的paramIsNum就是自定义的验证规则)
    protected $rule = [
        'id' => 'require|paramIsNum'
    ];

    /**
     * 自定义验证规则
     * @param string $value 验证内容
     * @param string $rule 验证规则
     * @param $data
     * @param string $field 验证的字段名
     * @return  bool
     */
    protected function paramIsNum($value = '', $rule = '', $data, $field)
    {
        if (is_numeric($value)) {// 参数验证
            return true;
        } else {
            return $field . '参数格式不正确!';
        }
    }
}

.运行结果

// 当我们的变量$id = 1时;输出的结果为:
    参数验证通过
// 当我们的变量$id != 1时;输出的结果为:
    $id. '参数格式不正确!'

底层逻辑分析

其实通过看源码很容易就能理解到这样做的原因。你需要明确以下几个点: 1.验证规则其实在验证类的底层是一个方法的形式. 如内置的require验证,其实就是底层的一个require方法. 2.我们自定义的验证类是继承了父类Validate类的. 通过oop思想,我们知道既然继承了父类的,我们可以给父类进行重写、重载等操作. 3.实现自定义方法 通过上面两点,我们就明白我们自定义的方法其实就是类似于在父类中去写了一个我们自定义的方法一样.

本文分享自微信公众号 - 卡二条的技术圈(gh_0275b8ba153f)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MySQL外键约束

    外键其实很好理解,简单的说就是两张表建立一个连接关系。这里我们那主表A和副表B举例,我A表中有用户信息,B表中有用户订单信息。要是数据完整对应起来,肯定是需要把...

    卡二条的技术圈子
  • 如何实现服务器免密码登录

    Mac可以直接打开终端,windows建议安装git shell 然后执行以下命令,一路回车

    卡二条的技术圈子
  • PHP实现无限极分类

    卡二条的技术圈子
  • MySQL外键约束

    外键其实很好理解,简单的说就是两张表建立一个连接关系。这里我们那主表A和副表B举例,我A表中有用户信息,B表中有用户订单信息。要是数据完整对应起来,肯定是需要把...

    卡二条的技术圈子
  • 【MyBatis框架点滴】——MyBatis一对多查询

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

    DannyHoo
  • 网络钓鱼攻击:Paypal用户很不幸的又中枪

    近期有不少网购用户收到一封来自Paypal的电子邮件,里面包含了购买商品的订单详情,并附着一个友情提示链接,其实它就是一钓鱼链接。 收到邮件的用户都应该知道,邮...

    FB客服
  • 专访 | 新竹交大前校长张懋中:求学问,需学问

    张懋中教授是那种「观之儒雅,就之可亲」的学者,但当谈起他的研究经历却两眼放光,在其文儒的外表之下透示出一份特别激动。

    AI科技评论
  • 用Python分析投票数据,选出真正的乐队TOP 5

    网络上没有公开的详细得票、排名数据,只好自己整理了。首先购买爱奇艺会员,不然很长时间都消耗在广告上了。然后用2倍速播放(这么听歌还挺带感的),然后看到这一幕,按...

    CDA数据分析师
  • 乐队的夏天大结局!用Python分析投票数据,选出真正的乐队TOP 5

    在昨天的盛大party后,《乐队的夏天》终于顺利收官。这个燃爆了整个夏天的综艺是否是今年最火的综艺节目虽然不得而知,但是不可否认,将乐队和摇滚又重新带到了公众面...

    大数据文摘
  • 11 Spring框架 SpringDAO的JdbcTemplate

    上几个章节我们探讨了Spring的IoC和AOP,这是Spring的重点,但是Spring对jdbc的支持同样我们也不能忘记,毕竟我们还要通过Spring来管理...

    MindMrWang

扫码关注云+社区

领取腾讯云代金券