一、概述
1)在请求层做数据安全处理,简化逻辑层代码。
2)支持GET、POST两种方式。
3)内转近30种校验规则,支持正定义正则表达式校验,支持自定义方法校验。
二、使用例子
<?php
namespace 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
<?php
namespace 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 |