微擎表单验证

联合创作 · 2023-10-02 10:41


微擎表单验证是一个让你的表单验证更为方便,快捷,安全的扩展,满足你的一切验证需求。



中文 | English


目录



安装


使用composer命令



composer require w7/engine-validate

完整文档查看完整文档


简单验证


支持简单定义一个验证器并进行验证:



try {
$data = Validate::make([
'user' => 'required|email',
'pass' => 'required|lengthBetween:6,16',
], [
'user.required' => '请输入用户名',
'user.email' => '用户名格式错误',
'pass.required' => '请输入密码',
'pass.lengthBetween' => '密码长度为6~16位',
])->check($data);
} catch (ValidateException $e) {
echo $e->getMessage();
}

如果验证通过,则返回所有通过验证的值,如未通过,则抛出一个W7\\Validate\\Exception\\ValidateException异常


验证器定义


为具体的验证场景或者数据表单定义验证器类,我们需要继承W7\\Validate\\Validate类,然后实例化后直接调用验证类的check方法即可完成验证,下面是一个例子:


我们定义一个LoginValidate验证器类用于登录的验证。



class LoginValidate extends Validate
{
protected $rule = [
'user' => 'required|email',
'pass' => 'required|digits_between:6,16',
];

protected $message = [
'user.required' => '请输入用户名',
'user.email' => '用户名格式错误',
'pass.required' => '请输入密码',
'pass.digits_between' => '密码长度为6~16位',
];
}




类属性定义的错误消息,优先级要高于自定义规则中的默认回复,高于自定义规则方法返回的错误


数据验证



$data = [
'user' => '123@qq.com',
'pass' => ''
];
$validate = new LoginValidate();
$validate->check($data);

此时会抛出一个W7\\Validate\\Exception\\ValidateException异常,message为请输入密码



$data = [
'user' => '123@qq.com',
'pass' => '123456'
];
$validate = new LoginValidate();
$data = $validate->check($data);

验证成功,并返回通过验证的值,返回的值为数组类型


验证数组


验证表单的输入为数组的字段也不难。你可以使用 「点」方法来验证数组中的属性。例如,如果传入的 HTTP 请求中包含search[keyword]字段, 可以如下验证:



protected $rule = [
'search.order' => 'numeric|between:1,2',
'search.keyword' => 'chsAlphaNum',
'search.recycle' => 'boolean',
];

你也可以验证数组中的每个元素。例如,要验证指定数组输入字段中的每一个 id 是唯一的,可以这么做:



protected $rule = [
'search.*.id' => 'numeric|unique:account'
];

数组规则的错误消息的定义也一样



protected $message = [
'search.order.numeric' => '排序参数错误',
'search.order.between' => '排序参数错误',
'search.keyword.chsAlphaNum' => '关键词只能包含中文,字母,数字',
'search.recycle.boolean' => '参数错误:recycle',
];

验证器类属性


$rule


用户定义验证器的验证规则,也可以通过setRules方法来进行设置,此方法为叠加,如果参数为null则为清空全部规则



// 类中定义
protected $rule = [
'user' => 'required'
];

// 使用方法定义
$v->setRules([
'user' => 'required'
]);

$message


用户定义验证器的错误信息,也可以通过setMessages方法来进行设置,此方法为叠加,如果参数为null则为清空全部错误消息



// 类中定义
protected $message = [
'user.required' => '账号必须填写'
];

// 使用方法定义
$v->setMessages([
'user.required' => '账号必须填写'
]);

$scene


定义验证场景的数据,用于指定验证场景对应的验证字段等,详细用法查看验证场景一节,同样也可以通过setScene方法来进行设置,此方法为叠加,如果参数为null则为清空全部验证场景



// 类中定义
protected $scene = [
'login' => ['user', 'pass']
];

// 使用方法定义
$v->setScene([
'login' => ['user', 'pass']
]);

$event


定义此验证器下的全局事件,详细用法查看事件一节



protected $event = [
CheckSiteStatus::class
];

$customAttributes


定义验证字段的名称,也可以通过setCustomAttributes方法来进行设置,此方法为叠加,如果参数为null则为清空全部字段名称, 错误消息中的:attribute会使用下面的值对应的替换



protected $customAttributes = [
'user' => '账号',
'pass' => '密码'
];

$default


定义字段的默认值



protected $default = [
'name' => '张三'
];

关于默认值的详情请查看默认值一节


$filter


用于数据验证后处理数据



protected $filter = [
'name' => 'trim'
];

关于过滤器的详情请查看过滤器一节


$ruleMessage


类方法规则的错误信息



protected $ruleMessage = [
':attribute的值只能具有中文'
];

点击查看示例


$filled


所有验证的字段在存在时不能为空,如果此属性值为true,所有规则会自动增加filled规则,默认为true


当出现以下情况时,不会自动添加filled规则



  • 验证规则中存在filled, nullable, accepted, present,required, required_if, required_unless, required_with,required_with_all, required_without, required_without_all规则

  • 验证规则存在extendImplicit定义的规则

  • 验证规则存在extendImplicitRule定义的规则

  • 验证规则实现了Itwmw\\Validation\\Support\\Interfaces\\ImplicitRule标记接口



protected bool $filled = true;

$regex


预定义正则表达式验证规则,详情查看正则表达式规则



protected $regex = [
'number' => '/^\\d+$/'
];
浏览 18
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报