前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ThinkPHP自定义验证类规则

ThinkPHP自定义验证类规则

作者头像
Mandy的名字被占用了
发布2019-07-22 20:21:30
2K0
发布2019-07-22 20:21:30
举报

背景描述

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

代码实践

.控制器代码

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

.验证类代码

代码语言:javascript
复制
//****** 该函数为控制器中的代码  
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 . '参数格式不正确!';
        }
    }
}

.运行结果

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

底层逻辑分析

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 卡二条的技术圈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档