一、概述

1)在请求层做数据安全处理,简化逻辑层代码。
2)支持GET、POST两种方式。
3)内转近30种校验规则,支持正定义正则表达式校验,支持自定义方法校验。

二、使用例子

  1. <?php
  2. namespace Demo\App\Controller;
  3. use Swork\Bean\Annotation\Validate; //引用类
  4. use ......
  5. /**
  6. * 请求参数验证器
  7. * @Controller("/valid")
  8. */
  9. class ValidController extends BeanCollector
  10. {
  11. /**
  12. * 必须输入(只检验值是否为空值)
  13. * @param Argument $argument
  14. * @Validate("name", Validate::Required, "自定义提示信息")
  15. * @return array
  16. */
  17. public function required(Argument $argument)
  18. {
  19. return [];
  20. }
  21. }

三、使用方法

引用命名空间 Swork\Bean\Annotation\Validate
在Controller的方法注释中加入 @Validate ,它有两个作用:

1)声明使用协议,它只使用第一个参数:

例子 功效作用
@Validate(Method:Get) 声明当前方法仅允许使用GET方法交互数据
@Validate(Method:Post) 声明当前方法仅允许使用POST方法交互数据

注:默认是GET的方式

2)设置校验规则,它有三个参数,第一、三个参数使用英文 双引号 “xxx” 包起来,并使用英文逗号 , 分隔:
@Validate(“第一个参数”, 第二个参数, “第三个参数”),如:
1) @Validate(“name”, Validate::Required) — 提示默认信息:请输入[name]
2) @Validate(“name”, Validate::Required, “请输入用户名字”) — 提示定义信息:请输入用户名字

参数位置 功效作用 样例 必填
第一个参数 声明作用字段 id
第二个参数 声明校验规则 Validate::Required
第三个参数 声明错误提示文字 用户ID不能为空

四、内置规则

检验规则 功效作用
Validate::Required 校验 不能空
Validate::Number 校验 0-9
Validate::Letter 校验 A-Za-z
Validate::LetterNumber 校验 A-Za-z0-9 字符
Validate::TextKey 校验 A-Za-z0-9_-, 字符
Validate::NotZero /检验 不等于0
Validate::Email 校验 邮箱 格式
Validate::Mobile 校验 手机号码 格式
Validate::Url 校验 http:// 或 https:// 格式
Validate::Date 校验 YYYY-MM-DD 的格式
Validate::Time 校验 hh:mm(:ss) 的格式
Validate::DateTime 校验 YYYY-MM-DD hh:mm(:ss) 的格式
Validate::Decimal 小数(含正负数)
Validate::Digits 整数(含正负数,不以0开头的数字)
Validate::Month 校验 YYYY-MM 的格式
Validate::Equal 检验 两个字段的值是否相同,如:
@Validate(“pwd“, Validate::Equal[$pwd2]) __—检查两个密码是否相同
Validate::Greater 检验 前面字段是否大于后面字段,或固定数值
@Validate(“greater“, Validate::Greater[12]) __—检查大于12
@Validate(“greater“, Validate::Greater[$greater2]) __—检查值大于$greater2这个字段的值
Validate::Lesser 检验 前面字段是否小于后面字段,或固定数值
Validate::GreaterZero 检验 大于0
Validate::GreaterEqualZero 检验 大于等于0
Validate::LessZero 检验 小于0
Validate::LessEqualZero 检验 小于等于0
Validate::GreaterEqual 检验 前面字段是否大于等于后面字段,或固定数值
Validate::LesserEqual 检验 前面字段是否小于等于后面字段,或固定数值
Validate::Count 数组长度 1-6, 1-, -6
Validate::Length 字符长度 1-6, 1-, -6
Validate::Range 值范围 1-6, 1-, -6
Validate::Ins 值范围 1|2|6
Validate::Regex 正则表达式 [^\d+$]

五、自定义规则

除了上述内置规则外,可以在自身的Controller内自定义检查规则
1)本类内,定义一个 public static 的方法,不需要返回值,有异常直接通过throw new exception
2)在Validate的第二参数,使用静态调用方式指向自定义的方法 ValidController::check1

  1. <?php
  2. namespace Demo\App\Controller;
  3. use Swork\Bean\Annotation\Validate;
  4. use ......
  5. /**
  6. * 请求参数验证器
  7. * @Controller("/valid")
  8. */
  9. class ValidController extends BeanCollector
  10. {
  11. /**
  12. * 自定义参数校验器
  13. * @param $v
  14. */
  15. public static function check1($v)
  16. {
  17. if($v == '')
  18. {
  19. throw new AppException("自定义信息");
  20. }
  21. }
  22. /**
  23. * 调用自定义的规则校验器
  24. * @param Argument $argument
  25. * @Validate("name1", ValidController::check1)
  26. * @return array
  27. */
  28. public function post(Argument $argument)
  29. {
  30. return [];
  31. }
  32. }

六、POST校验例子

  1. <?php
  2. /**
  3. * 必须输入(只检验值是否为空值)
  4. * @param Argument $argument
  5. * @Validate(Method::Post) ------- 核心行 -------
  6. * @Validate("name", Validate::Required, "请填写用户名字")
  7. * @return array
  8. */
  9. public function save(Argument $argument)
  10. {
  11. return 'success';
  12. }

七、Required叠加检验

注:v1.76及以上版有有效

使用场景:对某字段即要必填,又要限制符合某种规则(如大于0),原使用的方式需要写两个规则器,如:

  1. <?php
  2. /**
  3. * 检查 newsid 不能为空,且要大于0
  4. * @param Argument $argument
  5. * @Validate("newsid", Validate::Required, "NewsID不能为空")
  6. * @Validate("newsid", Validate::GreaterZero, "NewsID不能需要大于0")
  7. * @return array
  8. */
  9. public function save(Argument $argument)
  10. {
  11. return 'success';
  12. }

新版本使用方式,把二次检验的规则【GreaterZero】叠加至Required之上,仅使用一行,如:

  1. <?php
  2. /**
  3. * 检查 newsid 不能为空,且要大于0
  4. * @param Argument $argument
  5. * @Validate("newsid", Validate::Required[GreaterZero], "NewsID不能为空")
  6. * @return array
  7. */
  8. public function save(Argument $argument)
  9. {
  10. return 'success';
  11. }

注:由 Validate::Required —> Validate::Required[GreaterZero]

支持叠加的规则有:

检验规则 功效作用
Validate::Number 校验 0-9
Validate::Letter 校验 A-Za-z
Validate::LetterNumber 校验 A-Za-z0-9 字符
Validate::TextKey 校验 A-Za-z0-9_-, 字符
Validate::NotZero /检验 不等于0
Validate::Email 校验 邮箱 格式
Validate::Mobile 校验 手机号码 格式
Validate::Url 校验 http:// 或 https:// 格式
Validate::Date 校验 YYYY-MM-DD 的格式
Validate::Time 校验 hh:mm(:ss) 的格式
Validate::DateTime 校验 YYYY-MM-DD hh:mm(:ss) 的格式
Validate::Decimal 小数(含正负数)
Validate::Digits 整数(含正负数,不以0开头的数字)
Validate::Month 校验 YYYY-MM 的格式
Validate::Lesser 检验 前面字段是否小于后面字段,或固定数值
Validate::GreaterZero 检验 大于0
Validate::GreaterEqualZero 检验 大于等于0
Validate::LessZero 检验 小于0
Validate::LessEqualZero 检验 小于等于0