数据验证

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

用法

v2.6.8以下版本

  1. <?php
  2. use Cml\Vendor\Validate;
  3. if (Validate::isUrl($description)) {
  4. }
  5. if (Validate::isIp($ip)) {
  6. }
  7. //更多方法参考 http://api.cmlphp.com/Cml/Vendor/Validate.html

v2.6.8+

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

  1. <?php
  2. use Cml\Vendor\Validate;
  3. //初始化实例 传入包含要验证数据的数组 这边是$_POST
  4. $v = new Validate($_POST);
  5. //type、ptime、status、action 必传
  6. $v->rule('require', ['type', 'ptime', 'status', 'action']);
  7. //type、ptime、status 必须为整形
  8. $v->rule('int', ['type', 'ptime', 'status']);
  9. //ptime只能在0-23范围内
  10. $v->rule('in', ['ptime'], range(0, 23));
  11. //设置字段->实际显示字段的映射关系
  12. $v->label(array(
  13. 'type' => '类型',
  14. 'ptime' => '执行时间/间隔时间',
  15. 'status' => '状态',
  16. 'action' => '操作',
  17. ));
  18. //批量校验
  19. if(!$v->validate()) {
  20. $error = $v->getErrors();//获取错误信息
  21. }

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

内置验证规则

  1. 'require' => "不能为空",
  2. 'gt' => "必须大于 %s",
  3. 'lt' => "必须小于 %s",
  4. 'lengthGt' => "长度必须大于 %d",
  5. 'lengthLt' => "长度必须小于 %d",
  6. 'in' => "无效的值",
  7. 'notIn' => "无效的值",
  8. 'length' => "字符串长度必须在 %d, %d之间",
  9. 'empty' => "必须为空",
  10. 'equals' => "必须和 '%s' 一致",
  11. 'different' => "必须和 '%s' 不一致",
  12. 'arr' => "必须是数组",
  13. 'email' => "无效邮箱地址",
  14. 'ip' => "无效IP地址",
  15. 'number' => "只能是数字",
  16. 'int' => "只能是整数",
  17. 'bool' => "只能是布尔值",
  18. 'card' => "必须是身份证",
  19. 'mobile' => "手机号码不正确",
  20. 'phone' => "固话格式不正确",
  21. 'url' => "无效的URL",
  22. 'zip' => "邮政编码不对",
  23. 'qq' => "qq号格式不正确",
  24. 'english' => "只能包括英文字母(A-za-z)",
  25. 'chinese' => "只能为中文"

自定义验证规则

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

  1. <?php
  2. use Cml\Vendor\Validate;
  3. //添加
  4. Validate::addRule('test', function($value, $params) {
  5. //$value的值就是$_POST['test']的值
  6. //$params是参数数组,就是下面$v->rule...中的[1, 2]
  7. return false;
  8. }, '就是不让你通过检验');
  9. $v = new Validate($_POST);
  10. //使用
  11. $v->rule('test', 1, 2);
  12. ...

提示信息

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

  1. <?php
  2. use Cml\Vendor\Validate;
  3. $v = new Validate($_POST, 'lang_dir');

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

  1. <?php
  2. use Cml\Vendor\Validate;
  3. $v = new Validate($_POST);
  4. $v->rule('require', ['type', 'ptime', 'status', 'action'])
  5. ->message('{field} 必须填写!');
  6. //其中{field}为占位符。有设置label时会替换为label,没设置label时会替换为相应的字段名

原文: http://doc.cmlphp.com/devintro/validate.html