ThinkPHP5 表单请求和验证 - 05
内置验证规则
框架内置了一些常用的验证规则,基本上可以满足大部分的验证场景,下面列出了内置的验证规则:
验证规则 描述
require 必须验证
alpha 是否为字母
alphaNum 是否为字母和数字
alphaDash 是否为字母、数字,下划线 _及破折号 -
number 是否为数字
integer 是否为整型(注意大小范围)
float 是否为浮点型
boolean 是否为布尔型
email 是否为有效的邮箱格式
array 是否为数组
accepted 是否为 yes、 on或者 1
date 是否为有效的日期格式
activeUrl 是否为有效的IP地址或者域名
url 是否为有效的URL地址
ip 是否为有效的IP地址(支持ipv4和ipv6)
in 是否在某个范围内
notin 是否不在某个范围内
between 是否在某个区间
notBetween 是否不在某个区间
length 长度是否为指定长度或者区间
max 长度最大值
min 长度最小值
after 是否在某个日期之后
before 是否在某个日期之前
expire 是否在某个日期区间
allowIp 请求IP是否是某个值或者范围
denyIp 是否禁止某个或者范围的IP地址
confirm 是否和另外一个字段值相同
different 是否和另外一个字段值不同
>、 >=、 <、 <=、 = 值比较
regex 正则验证
file 是否为一个上传文件
image 是否为一个图像上传文件
fileExt 允许上传的文件后缀
fileMime 允许上传的文件类型
fileSize 上传文件大小限制
unique 验证数据是否在数据表唯一
token 表单令牌验证
内置验证规则中,下面的验证规则不需要和验证字段强制关联,也就是说可以定义在表单的任何一个必填字段上都有效: token(令牌验证)、 allowIp(允许访问IP)、 denyIp(禁止访问IP)和 expire(表单提交有效期)。
具体每个验证规则的使用请参考官方的完全开发手册验证章节->内置验证规则的用法,不再重复。
自定义验证规则
当内置验证规则无法满足需求的时候,可以自定义验证规则,有两种方式:
最简单的方式是定义验证器的情况,我们可以直接在验证器里面定义新的验证方法,例如:
<?php
namespace appindexvalidate;
use thinkValidate;
class User extends Validate
{
protected $rule = [
"name" => "require|checkName:thinkphp",
"email" => "email",
];
protected $message = [
"name" => "用户名必须",
"email" => "邮箱格式错误",
];
// 自定义验证规则
protected function checkName($value, $rule, $data)
{
return $rule == $value ? true : "名称错误";
}
}
注意,自定义的验证方法并不需要 public,支持的参数包括(按参数顺序排列):
参数名 描述
value 参数值
rule 验证规则
data 表单数据
field 字段名
title 字段描述
自定义验证方法支持的返回值有:
返回值 含义
true 验证通过
false 验证失败,使用规则里面定义的错误信息
其它 验证失败,返回值就是错误信息或者数组
控制器测试代码如下:
<?php
namespace appindexcontroller;
use thinkController;
use thinkRequest;
class Index extends Controller
{
public function index(Request $request)
{
// 验证表单数据
$result = $this->validate($request->param(), "User");
if (true !== $result) {
// 验证失败 输出错误信息
return "数据验证失败:" . $result;
}
else
{
return "数据验证通过!";
}
}
}
通过postman测试结果:
最终返回的验证失败的错误信息是checkName自定义验证方法里面返回的错误信息,而不是验证规则里面定义的错误。
框架内置了一些常用的验证规则,基本上可以满足大部分的验证场景,下面列出了内置的验证规则:
验证规则 描述
require 必须验证
alpha 是否为字母
alphaNum 是否为字母和数字
alphaDash 是否为字母、数字,下划线 _及破折号 -
number 是否为数字
integer 是否为整型(注意大小范围)
float 是否为浮点型
boolean 是否为布尔型
email 是否为有效的邮箱格式
array 是否为数组
accepted 是否为 yes、 on或者 1
date 是否为有效的日期格式
activeUrl 是否为有效的IP地址或者域名
url 是否为有效的URL地址
ip 是否为有效的IP地址(支持ipv4和ipv6)
in 是否在某个范围内
notin 是否不在某个范围内
between 是否在某个区间
notBetween 是否不在某个区间
length 长度是否为指定长度或者区间
max 长度最大值
min 长度最小值
after 是否在某个日期之后
before 是否在某个日期之前
expire 是否在某个日期区间
allowIp 请求IP是否是某个值或者范围
denyIp 是否禁止某个或者范围的IP地址
confirm 是否和另外一个字段值相同
different 是否和另外一个字段值不同
>、 >=、 <、 <=、 = 值比较
regex 正则验证
file 是否为一个上传文件
image 是否为一个图像上传文件
fileExt 允许上传的文件后缀
fileMime 允许上传的文件类型
fileSize 上传文件大小限制
unique 验证数据是否在数据表唯一
token 表单令牌验证
内置验证规则中,下面的验证规则不需要和验证字段强制关联,也就是说可以定义在表单的任何一个必填字段上都有效: token(令牌验证)、 allowIp(允许访问IP)、 denyIp(禁止访问IP)和 expire(表单提交有效期)。
具体每个验证规则的使用请参考官方的完全开发手册验证章节->内置验证规则的用法,不再重复。
自定义验证规则
当内置验证规则无法满足需求的时候,可以自定义验证规则,有两种方式:
最简单的方式是定义验证器的情况,我们可以直接在验证器里面定义新的验证方法,例如:
<?php
namespace appindexvalidate;
use thinkValidate;
class User extends Validate
{
protected $rule = [
"name" => "require|checkName:thinkphp",
"email" => "email",
];
protected $message = [
"name" => "用户名必须",
"email" => "邮箱格式错误",
];
// 自定义验证规则
protected function checkName($value, $rule, $data)
{
return $rule == $value ? true : "名称错误";
}
}
注意,自定义的验证方法并不需要 public,支持的参数包括(按参数顺序排列):
参数名 描述
value 参数值
rule 验证规则
data 表单数据
field 字段名
title 字段描述
自定义验证方法支持的返回值有:
返回值 含义
true 验证通过
false 验证失败,使用规则里面定义的错误信息
其它 验证失败,返回值就是错误信息或者数组
控制器测试代码如下:
<?php
namespace appindexcontroller;
use thinkController;
use thinkRequest;
class Index extends Controller
{
public function index(Request $request)
{
// 验证表单数据
$result = $this->validate($request->param(), "User");
if (true !== $result) {
// 验证失败 输出错误信息
return "数据验证失败:" . $result;
}
else
{
return "数据验证通过!";
}
}
}
通过postman测试结果:
最终返回的验证失败的错误信息是checkName自定义验证方法里面返回的错误信息,而不是验证规则里面定义的错误。
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。