数据库 - Model 前置说明
官方开源项目 抓取代理IP

介绍

SW-X内置的验证规则可能并不足够实际开发使用,
Validate验证器是基于事件机制实现,支持开发者扩展验证规则。

提示:扩展规则,建议(并不强制)统一存放在/box/event/validate/目录下。

提示:扩展规则,无需继承任何基类,但需要按固定格式,实现规则入口方法。

注册规则

所有自定义规则,必须在/box/validate.php文件中进行手动注册之后,才能正常使用。
注册规则,依赖\x\validate\Event::listen()方法。

该方法支持参数如下:

  • string $rule_name

    • 功能:规则名称
    • 注意:不能与系统内置的规则名称相同
  • string|array $class

    • 功能:规则处理类的命名空间地址
    • 其它值:[命名空间地址, 方法名]
    • 注意:当输入字符串,或者数组中只有命名空间地址时,默认的方法名为run
  • string $message

    • 功能:验证不通过时的错误信息
    • 默认值null
    • 注意:记得使用占位符声明字段名和参数位置

例如下面,注册一条名为qq的规则,处理类为\box\event\validate\qq,方法run()

use \x\validate\Event;
// 字符名别名替换,可以用{:preset},也可以用{字段名}做占位符
// 如果是有额外参数的,按参数顺序,可以用{0-N}来做占位符

// 如果是默认run的,可以用字符串
Event::listen('qq', '\box\event\validate\qq', '{:preset} QQ号不正确,只能是 {qq} 其中一个');

// 当然也可以手动设置处理方法名
Event::listen('qq', ['\box\event\validate\qq', 'run'], '{:preset} QQ号不正确,只能是 {qq} 其中一个');

创建自定义规则

所有自定义规则,所创建的处理方法,都必须注意以下几点:

  • 不需要继承任何基类;
  • 规则入口方法,必须是public权限;
  • 规则入口方法,必须声明static静态属性;
  • 规则入口方法,必须($data, $param, $rule=null)3个参数;
  • 规则入口方法,返回值为bool类型,true表示验证通过,false表示验证不通过。


下面,一起来创建上面示例中的qq规则,
代码地址为:/box/event/validate/qq.php

namespace box\event\validate;

class qq {
    /**
     * 规则入口方法
     * @todo 无
     * @author 小黄牛
     * @version v2.5.6 + 2021-09-15
     * @deprecated 暂不启用
     * @global 无
     * @param array $data 完整表单
     * @param mixed $param 参数值
     * @param string $rule :后参数
     * @return bool
    */
    public static function run($data, $param, $rule=null) {
        // 系统不会帮忙切割$rule参数中的,逗号,需要自行切换
        // 如果担心参数中有多余空格,也需要自行删除
        $array = explode(',', str_replace(' ', '', $rule));
        
        return in_array($param, $array);
    }
}

现在,这个qq规则就可以直接使用了,下面使用单条数据验证进行调用演示:

$Validate = new \x\Validate();
$Validate->field('user_qq')->alias('会员QQ号')->rule('require|qq:1731223728, 1765321014, 3455435050');
$data = [
    'user_qq' => '12344577'
];
if ($ValiUser->fails($data)) {
    // 打印失败原因
    var_dump($Validate->errors());
}

SW-X

企业级 - 高性能 PHP 框架

最后更新:3年前 . 作者-小黄牛

本篇目录