数据验证

数据验证做为开发中不可缺少的一环。在cmlphp中也提供了简单易用的数据验证工具。

用法

v2.6.8以下版本


<?php
use Cml\Vendor\Validate;

if (Validate::isUrl($description)) {

}

if (Validate::isIp($ip)) {



}
//更多方法参考 http://api.cmlphp.com/Cml/Vendor/Validate.html

v2.6.8+

在v2.6.8版本中对Validate做了增强,除了以上的直接调用方法外,还可以有以下用法:

<?php

use Cml\Vendor\Validate;

//初始化实例 传入包含要验证数据的数组 这边是$_POST
$v = new Validate($_POST);

//type、ptime、status、action 必传
$v->rule('require', ['type', 'ptime', 'status', 'action']);

//type、ptime、status 必须为整形 
$v->rule('int', ['type', 'ptime', 'status']);

//ptime只能在0-23范围内
$v->rule('in', ['ptime'], range(0, 23));

//设置字段->实际显示字段的映射关系
$v->label(array(
    'type' => '类型',
    'ptime' => '执行时间/间隔时间',
    'status' => '状态',
    'action' => '操作',
));

//批量校验
if(!$v->validate()) {
    $error = $v->getErrors();//获取错误信息
}

上面大概演示了如何使用cmlphp自带的Validate组件进行批量数据验证。下面列出所有的规则以及如何自定义规则。

内置验证规则

'require' => "不能为空",

'gt' => "必须大于 %s",

'lt' => "必须小于 %s",

'lengthGt' => "长度必须大于 %d",

'lengthLt' => "长度必须小于 %d",

'in' => "无效的值",

'notIn' => "无效的值",

'length' => "字符串长度必须在 %d, %d之间",

'empty' => "必须为空",

'equals' => "必须和 '%s' 一致",

'different' => "必须和 '%s' 不一致",

'arr' => "必须是数组",

'email' => "无效邮箱地址",

'ip' => "无效IP地址",

'number' => "只能是数字",

'int' => "只能是整数",

'bool' => "只能是布尔值",

'card' => "必须是身份证",

'mobile' => "手机号码不正确",

'phone' => "固话格式不正确",

'url' => "无效的URL",

'zip' => "邮政编码不对",

'qq' => "qq号格式不正确",

'english' => "只能包括英文字母(A-za-z)",

'chinese' => "只能为中文"

自定义验证规则

除了以上内置的校验规则外,还可以自定义验证规则,方法如下:

<?php

use Cml\Vendor\Validate;

//添加
Validate::addRule('test', function($value, $params) {
    //$value的值就是$_POST['test']的值
    //$params是参数数组,就是下面$v->rule...中的[1, 2]
    return false;

}, '就是不让你通过检验');

$v = new Validate($_POST);

//使用
$v->rule('test', 1, 2);
...

提示信息

内置的验证规则,提示信息跟随系统的语言设置。当框架的语言包为哪个语言时验证规则也显示哪个语言。语言包存放路径为框架的Vendor\Validate\Lang目录下。也可以在实例化的时候自定义语言包所在路径

<?php

use Cml\Vendor\Validate;


$v = new Validate($_POST, 'lang_dir');

如果不想用内置的语言包也可以使用 message自定义提示信息,使用方法如下:

<?php

use Cml\Vendor\Validate;


$v = new Validate($_POST);
$v->rule('require', ['type', 'ptime', 'status', 'action'])
  ->message('{field} 必须填写!'); 
//其中{field}为占位符。有设置label时会替换为label,没设置label时会替换为相应的字段名

results matching ""

    No results matching ""