一、概述
1)在请求层做数据安全处理,简化逻辑层代码。
2)支持GET、POST两种方式。
3)内转近30种校验规则,支持正定义正则表达式校验,支持自定义方法校验。
二、使用例子
<?phpnamespace Demo\App\Controller;use Swork\Bean\Annotation\Validate; //引用类use ....../*** 请求参数验证器* @Controller("/valid")*/class ValidController extends BeanCollector{/*** 必须输入(只检验值是否为空值)* @param Argument $argument* @Validate("name", Validate::Required, "自定义提示信息")* @return array*/public function required(Argument $argument){return [];}}
三、使用方法
引用命名空间 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
<?phpnamespace Demo\App\Controller;use Swork\Bean\Annotation\Validate;use ....../*** 请求参数验证器* @Controller("/valid")*/class ValidController extends BeanCollector{/*** 自定义参数校验器* @param $v*/public static function check1($v){if($v == ''){throw new AppException("自定义信息");}}/*** 调用自定义的规则校验器* @param Argument $argument* @Validate("name1", ValidController::check1)* @return array*/public function post(Argument $argument){return [];}}
六、POST校验例子
<?php/*** 必须输入(只检验值是否为空值)* @param Argument $argument* @Validate(Method::Post) ------- 核心行 -------* @Validate("name", Validate::Required, "请填写用户名字")* @return array*/public function save(Argument $argument){return 'success';}
七、Required叠加检验
注:v1.76及以上版有有效
使用场景:对某字段即要必填,又要限制符合某种规则(如大于0),原使用的方式需要写两个规则器,如:
<?php/*** 检查 newsid 不能为空,且要大于0* @param Argument $argument* @Validate("newsid", Validate::Required, "NewsID不能为空")* @Validate("newsid", Validate::GreaterZero, "NewsID不能需要大于0")* @return array*/public function save(Argument $argument){return 'success';}
新版本使用方式,把二次检验的规则【GreaterZero】叠加至Required之上,仅使用一行,如:
<?php/*** 检查 newsid 不能为空,且要大于0* @param Argument $argument* @Validate("newsid", Validate::Required[GreaterZero], "NewsID不能为空")* @return array*/public function save(Argument $argument){return 'success';}
注:由 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 |
